2016-03-28 17 views
0

基本的には、「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)); 

    } 

答えて

1

あなたの「C」検出コードは動作しません: これは私のカメラ機能のためのコードです。それは両方になることはできません。別のグローバル変数isCPressedを保持する必要があります。 Cを押すとtrueに設定され、Cがリリースされるとfalseに設定され、矢印が押されると(isCPressed)がチェックされます。

カメラコードは0,0,0を見ながら0,0,10の点を周回します。それはあなたが望むものではないようです。dist、oy dist、 'dist'の距離で0,0,0を軌道する目の位置は0

関連する問題