基本的には、「c」キーを押しながら矢印キーを使用すると、中央のオブジェクトの周りをカメラで回転させようとしています。OpenGL 2つのキーでカメラを回転
私の最初の質問は、カメラとはあまり関係ありませんが、キーコールバックで同時に2つのキーを認識することができます。
L/Rキーと "c"のif文を別にしても機能がありますが、 "c"キーを押したままカメラを回転させたいときには機能しません" switch(key)とif文をif文の中で使ってみました。私が試した両方の実装は以下のコードにあります:
float R = 0.0;
float U = 0.0;
static void keyCallback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
if(key == GLFW_KEY_C && action == GLFW_PRESS) {
switch(key) {
case GLFW_KEY_RIGHT:
R+=0.05;
camera(R, U);
break;
case GLFW_KEY_LEFT:
R-=0.05;
camera(R, U);
break;
case GLFW_KEY_UP:
break;
case GLFW_KEY_DOWN:
break;
default:
break;
}
}
//OR --
if(key == GLFW_KEY_C && action == GLFW_PRESS) {
if(key == GLFW_KEY_RIGHT && action == GLFW_PRESS) {
R+=0.05;
camera(R, U);
}
}
}
私は間違っていますか?私が試すことができる何か他にありますか?
私の2番目の質問は、カメラと関連があります。現在のコードでオブジェクトの周りの半分の円で回転しますが、一度特定の点に達すると、カメラは回転するのではなく、オブジェクトからさらに遠くにパンします。あなただけ一致しているので、キーがCと矢印に等しいとき
GLfloat ox = 10.0;
GLfloat oy = 10.0;
static void camera(float RL, float UD) {
ox+=cos(glm::radians(RL));
oy+=sin(glm::radians(RL));
gViewMatrix = glm::lookAt(glm::vec3(ox, oy, 10.0f), // eye
glm::vec3(0.0, 0.0, 0.0), // center
glm::vec3(0.0, 1.0, 0.0));
}