2017-01-21 12 views
0

私の問題は、OpenGLは常に(0,0,0)の周りを回転するということです。しかし、私が "カメラ"を翻訳すると、例えば、私が後方に移動すると、(0,0,0)も回ります。しかし、私はカメラの周りを回転する必要があるので、私はポイントを(0,0,0)に戻し、回転させて、それらを元の位置に変換しなければならないでしょう。
ただし、ここでエラーが発生します。回転後、回転は回転に対して相対的です。
どうすれば元に戻すことができますか?
PS:私はgluLookAtを(使用したいいけない)OpenGLとC++の "カメラ"を回る方法

だから、カメラに対して回転するように私のコードは次のようになります。

//set rotation to zero 
glRotatef(-yr,0.0f,1.0f,0.0f); 
glRotatef(-xr,1.0f,0.0f,0.0f); 
//set points relative to camera 
glTranslatef(-cam_pos[0],-cam_pos[1],-cam_pos[2]); 
//reset rotation 
glRotatef(yr,0.0f,1.0f,0.0f); 
glRotatef(xr,1.0f,0.0f,0.0f); 
//rotate 
glRotatef(angley,0.0f,1.0f,0.0f); 
glRotatef(anglex,1.0f,0.0f,0.0f); 
//and now, how to translate back, 
//movement is relative to the cam ? 
//I would simply use : 
//glTranslatef(cam_pos[0],cam_pos[1],cam_pos[2]); 
//which wont work because its relative to the new rotation. 
+0

カメラを翻訳するためにコードを共有できますか? –

+0

はい、できますが、重要ではありません。 – user7185318

+0

[MCVE](http://stackoverflow.com/help/mcve)を提供し、あなたの問題についてもっと明示しようとしています。質問は私にとってはかなり不明です – Zouch

答えて

2

OpenGLはカメラが直接変換をサポートしていません。カメラは常に正確な中心(0、0、0)に位置していると仮定します。したがって、逆光カメラ変換を使用して、すべての光源、すべてのオブジェクト、および他のすべてのもの(すべてのシーン)を変換する必要があります。

gluLookAt()は、「逆カメラ変換行列」を使用して要素を変換します。それを使用したくない場合は、OpenGLのモデル変換メソッドを使用する必要があります。 OpenGL's documentation;

から

https://stackoverflow.com/a/3483744/4725899 https://www.gamedev.net/topic/421529-manual-alternative-to-glulookat-/

限りOpenGLが懸念しているとして、何のカメラはありません。具体的には、 カメラは常に視点座標(0.,0,0)に位置しています。 カメラの動きの外観を与えるには、OpenGLアプリケーション は、カメラ変換の逆を使用してシーンを移動する必要があります。

+0

私は申し訳ありませんが、実際には私が探しているものではありません。私の新しいコードがそれをより明確にすることを願っています。 – user7185318

関連する問題