2

位置ベクトルと 3 つの方向ベクトルを使用して Java でカメラを実装したのでgluLookAt();、「ゴースト モード」で動き回っても問題なく動作しますが、衝突検出を追加したいと考えています。位置ベクトルを、OpenGL がオブジェクトを描画する座標に変換する方法がわかりません。

私の描画ループの大まかなスケッチは次のとおりです。

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
camera.setView();
drawer.drawTheScene();

先に進む方法がわかりません。呼び出しと位置ベクトルの間の ModelView マトリックスを見ると、何の相関関係も見つかりませんでした。

4

1 に答える 1

2

最後に、http://fly.cc.fer.hr/~unreal/theredbook/chapter03.htmlをもう一度確認して、それを理解しました。アイスペース(カメラ)からオブジェクトスペースに移動するには、そのベクトルにModelView行列の逆行列を掛けるか、コードで乗算する必要があります。

Vector4f vpos = new Vector4f(0, 0, 0, 1); 
// (0,0,0,1) because it's relative to the cam
float mv[]=new float[16];
ByteBuffer temp = ByteBuffer.allocateDirect(64);
temp.order(ByteOrder.nativeOrder());
GL11.glGetFloat(GL11.GL_MODELVIEW_MATRIX, (FloatBuffer)temp.asFloatBuffer());
temp.asFloatBuffer().get(mv);
Matrix4f m4 = new Matrix4f();
m4.load((FloatBuffer)temp.asFloatBuffer());
m4.invert();
vpos = Matrix4f.transform(m4, vpos, vpos);
于 2011-01-07T17:50:22.167 に答える