2011-01-18 6 views
0

カメラを移動しようとしています。私はgluLookAt関数を使用しています。私はこれにいくつかの変数があります。openGL moving camera

float x,y,z ==> is camera location 
float lx,ly,lz ==> is point that camera looks. 

私はそれが仕事である

x= x+0.01 
gluLookAt(x,y,z, lx,ly,lz, 0.0 1.0, 0.0); 

X軸上で移動してみてください。

私は

z = z +0.01 
gluLookAt(x,y,z, lx,ly,lz, 0.0 1.0, 0.0); 

何も変更上記と同じようz軸上を移動してみてください。また、この関数を何度か呼び出すと、オブジェクトの消滅(オブジェクトのコーナー)の前半と、次回のgluLookAtオブジェクトの呼び出しが完全に消えてしまいます。

カメラが前方に移動するとオブジェクトが大きくなり、後方に移動するとオブジェクトは小さくなります。しかし、私がz軸にカメラを動かすと、何らかの変化が起こります。

何が問題ですか?なぜオブジェクトが消えてしまうのでしょうか?カメラを前方に動かすと、どのようにオブジェクトを大きくすることができますか?

私はglTranslateまたはオブジェクトのサイズを大きくすることで解決できることは分かっています。しかし、私はgluLookAtを使用したい。

お返事ありがとうございます。

+0

+ cemal OpenGLでThinMatrixによるチュートリアルを試してみてください – Meinkraft

答えて

0

デフォルトの投影行列は、おそらく正射影投影行列です。つまり、オブジェクトがカメラの近くにあるときに大きくならないことを意味します。

カメラが通過するとオブジェクトは最終的に消えます(z平面を横切る)。

Michaelが言及しているように、gluPerspectiveを使用して透視投影行列をインストールする必要があります。

0

Michaelが述べたように、これは投影行列の問題のように聞こえます。透視変換を使用する場合、距離よりもカメラにより近い深度試験精度を提供するように深さが変換される。この変換の一部として、z座標(ビューポート座標)はzNear(近平面距離) - zFar(遠平面距離)で除算されます。深度の戦いを最小限に抑えるには、zNear距離(オブジェクトが目に見えなくなるカメラの前の距離)が離れていなければならないほど大きくなければなりません。オブジェクトに向かって移動すると、最終的に平面とオブジェクトは切り取られます(通常、オブジェクトの前面が切り取られているかのように見え、内部または内部を見ることができます)。