2017-06-26 6 views
0

Openglで次のコードを実装して、モデルのズームインとズームアウトを行いました。残念なことに、それは正射影投影では期待通りには表示されません。 「+」または「 - 」をクリックして、視点から直交に切り替えると、ズームインおよびズームアウトするときに1つのステップしか表示されません。私が直交から視点に切り替えると、ズームインとズームアウトが行われます。「+」をクリックするだけでズームイン/ズームアウトし、キー「 - 」はまったく動作しません。正投影投影ではズームアウトが機能しません

誰かが助けることができますか?前もって感謝します。

glm::mat4 view = glm::lookAt(glm::vec3(4, 4, -3), glm::vec3(0, 1, 0), glm::vec3(0, 1, 0)); 
glm::mat4 projection = glm::perspective(45.0f, 4.0f/3.0f, 0.2f, 1000.0f); 

float zoom = 0.5236f; 

case 'w': 
     if (!(perspective)){ 
      projection = glm::perspective(zoom, 1.0f, 0.1f, 1000.0f); 
      perspective = true; 
     } 
     break; 
    case 's': 
     if (perspective){ 
      projection = glm::ortho(-1.0f, 1.0f, -1.0f, 1.0f, -1000.0f, 1000.0f); 
      perspective = false; 
     } 
     break; 
    case '+': 

     if (zoom >= 0.0236){ 
      if (perspective){ 
       //step of zooming 
       zoom = zoom - 0.5; 
       zoom -= 0.1f; 
       projection = glm::perspective(zoom, 1.0f, 0.1f, 1000.0f); 

      } 
      else{ 
       //step of zooming 
       zoom = zoom - 500; 
       zoom -= 0.1f; 
       projection = glm::ortho(-0.1 - zoom, 0.1 + zoom, -0.1 - zoom, 0.1 + zoom, -1000.0, 1000.0); 

      } 
     } 
      break; 

    case '-': 
     if (zoom <= 3.0236f){ 
      if (perspective){ 
       // step of zooming 
       zoom = zoom + 0.5; 
       zoom += 0.1f; 
       projection = glm::perspective(zoom, 1.0f, 0.1f, 1000.0f); 

      } 
      else{  
       //step of zooming 
       zoom = zoom + 500; 
       zoom += 0.1f; 
       projection = glm::ortho(-0.1 - zoom, 0.1 + zoom, -0.1 - zoom, 0.1 + zoom, -1000.0, 1000.0); 
     } 
    } 
    break; 
    } 
+2

[オルトとperspecive問題間のOpenGLスイッチング]の可能な複製(https://stackoverflow.com/questions/44710262/opengl-switching-between-orth-and-perspecive-problems) – Ripi2

答えて

1

正投影で期待どおりUnfortunetlyそれがショーをdoesn't。私は「+」をクリックするか、すると、「 - 」と直交する観点から切り替えて、それがためにあなたのcase 's'

case 's': 
    if (perspective){ 
     projection = glm::ortho(-1.0f, 1.0f, -1.0f, 1.0f, -1000.0f, 1000.0f); 
     perspective = false; 
    } 
    break; 

である私は

ズームイン、ズームアウトワンステップ、

を表示しますこのスイッチのズーム係数を連続して入力しているわけではありません。 「 - 」あなたは「+」またはを押したときにのみ発生します。

projection = glm::ortho(-0.1 - zoom, 0.1 + zoom, -0.1 - zoom, 0.1 + zoom, -1000.0, 1000.0); 

私は、直交からの視点に切り替えると、それはズームインよりも「+」上だけをクリックすると、それは、ズームイン、ズームアウトして鍵は " - "全く動作しません。

あなたが正字で表示され、zoom = 0.5236f;としましょう。 ' - 'キーを押します。あなたのプログラムに続いて、ズームが3.0236f未満になると、ifステートメントに入ります。だから、あなたのズームはzoom = 0.5236f + 500 = 500.5236

になります。それから、私は理由を知りません。なぜなら、0.1を追加するので、zoom = 500.6236fです。次に、透視投影に戻ります。今度は、「+」を押すたびに、0.0236をズームすると、0.6fでデシードされます。

しかし、「 - 」を押すとズームが約500となり、3.0236fよりも大きすぎます。だから、あなたはifステートメントの中に入ることはありません。

あなたのロジックは間違っています。あなたはそれを改善する必要があります。申し訳ありませんが