私は、常にカメラに面するように平面ジオメトリを常に調整するボリューム レンダリング プログラムを作成しています。プレーン ジオメトリは、カメラが回転するたびに回転し、シーン内の他のすべてのものに対して移動していないように見えます。(私は、カメラの視線方向を、これらの平面ジオメトリの法線ベクトルとして使用します。)
現在、カスタム回転ベクトル (「回転」) を手動で保存し、レンダリング関数で次のようにその影響を適用しています。
gl2.glRotated(rotations.y, 1.0, 0.0, 0.0);
gl2.glRotated(rotations.x, 0.0, 1.0, 0.0);
その後、回転からの値を使用して、x 軸と y 軸を中心に初期ビュー方向 (0,0,-1) を回転させることにより、ビュー方向を取得します。これは、次の方法で行われます。最終的な視線方向は 'view' に保存されます。
public Vec3f getViewingAngle(){
//first rotate the viewing POINT
//then find the vector from there to the center
Vec3f view=new Vec3f(0,0,-1);
float newZ=0;
float ratio=(float) (Math.PI/180);
float vA=(float) (-1f*rotations.y*(ratio));
float hA=(float) (-1f*rotations.x)*ratio;
//rotate about the x axis first
float newY=(float) (view.y*Math.cos(vA)-view.z*Math.sin(vA));
newZ=(float) (view.y*Math.sin(vA)+view.z*Math.cos(vA));
view=new Vec3f(view.x,newY,newZ);
//rotate about Y axis
float newX=(float) (view.z*Math.sin(hA)+view.x*Math.cos(hA));
newZ=(float) (view.z*Math.cos(hA)-view.x*Math.sin(hA));
view=new Vec3f(newX,view.y,newZ);
view=new Vec3f(view.x*-1f,view.y*-1f,view.z*-1f);
//return the finalized normal viewing direction
view=Vec3f.normalized(view);
return view;
}
現在、このプログラムを、カメラの回転がサードパーティのグラフィック ライブラリによって処理される、より大きなプロジェクトに移行しています。回転ベクトルがありません。ビュー方向ベクトルを取得する方法はありますか:
GLfloat matrix[16];
glGetFloatv (GL_MODELVIEW_MATRIX, matrix);
http://3dengine.org/Modelview_matrixを参照してこれを見ていますが、ビューの方向を思いつく方法がまだわかりません。それが可能かどうか、そしてそれがどのように機能するかを誰かが説明してもらえますか?