2

我已经使用位置向量和三个方向向量在 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 回答