J'ai une scène avec deux cubes, et j'aimerais pouvoir mettre à l'échelle un seul cube. Fondamentalement, ce que je veux faire est quand j'appuie sur la touche S majuscule, le cube continuera à devenir plus grand plus longtemps que je continue à appuyer sur majuscule S, et quand j'appuie sur les minuscules je veux être en mesure de rendre le cube plus petit tant que la lettre minuscule est enfoncée.Mise à l'échelle d'un seul objet dans une scène - OpenGL 3.0
J'ai couru en deux problèmes:
- Je ne sais pas comment détecter si la touche est enfoncée minuscules ou majuscules.
- Mes scènes entières (comme dans les deux cubes) s'agrandissent et se rétrécissent lorsque j'appuie sur les touches.
Voici mon code pour les clés:
void keyPressed(GLFWwindow *_window, int key, int scancode, int action, int mods) {
// Control the state of keys pressed
if (action == GLFW_PRESS)
keys[key] = true;
else if (action == GLFW_RELEASE)
keys[key] = false;
switch (key) {
case GLFW_KEY_ESCAPE: glfwSetWindowShouldClose(_window, GL_TRUE); break;
// Change between points, lines and fill
case GLFW_KEY_P: glPolygonMode(GL_FRONT_AND_BACK, getMode('P')); break;
case GLFW_KEY_W: glPolygonMode(GL_FRONT_AND_BACK, getMode('W')); break;
case GLFW_KEY_T: glPolygonMode(GL_FRONT_AND_BACK, getMode('T')); break;
case GLFW_KEY_S: scale_matrix = scale(scale_matrix, vec3(2.0f, 2.0f, 2.0f));
//model_matrix = scale(model_matrix, vec3(2.0f, 2.0f, 2.0f));
break;
case GLFW_KEY_R: scale_matrix = scale(scale_matrix, vec3(0.5f, 0.5f, 0.5f));
//model_matrix = scale(model_matrix, vec3(0.0f, 0.0f, -1.0f));
break;
//Reset camera
case GLFW_KEY_D: cameraPosition = vec3(0.0, 0.0, 1.0);
view_matrix = lookAt(
cameraPosition,
vec3(0.0f, 0.0f, -100.0f),
vec3(0.0, 1.0, 0.0));
break;
default: break;
}
return;}
Depuis que je ne savais pas sur la façon de détecter les cas majuscules et minuscules, j'affecté R comme la clé pour réduire la scène. Voici le code pour mes positions de cube:
glm::vec3 cubePositions[] = {
glm::vec3(0.0f, 0.0f, -1.0f),
glm::vec3(2.0f, 10.0f, -10.0f),
};
Ce que j'ai essayé jusqu'à présent était d'utiliser une instruction if pour le cas: GLFW_KEY_S pour vérifier la position du cube, mais cela ne fonctionne pas.
L'OP peut ne pas utiliser le pipeline à fonction fixe. – datenwolf