我使用位置矢量和三个方向向量在Java中实现了一个相机,所以我可以使用gluLookAt();
在'ghost模式'中移动工作得很好,但我想添加碰撞检测。我似乎无法弄清楚如何将我的位置矢量转换为OpenGL绘制我的对象的坐标。
我的绘图循环的草图如下:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
camera.setView();
drawer.drawTheScene();
我不知道如何继续;看看调用和我的位置向量之间的ModelView矩阵,我没有发现任何类型的相关性。
答案 0 :(得分: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);