我有一个载体对象和一个可通过键盘输入控制的平面,我希望能够检测到2之间的碰撞,这样我就可以降落在载体上。这是我的代码:
//Camera
gluLookAt(45,30,-50,eyeX,eyeY-5,eyeZ,0,1,0);
//Skybox
glPushMatrix();
glEnable(GL_TEXTURE_2D);
drawSea();
glDisable(GL_TEXTURE_2D);
drawCube();
//Carrier
glPushMatrix();
//glTranslatef(-22,12,0);
glTranslatef(-carrierX,12,-carrierZ-190);
glEnable(GL_TEXTURE_2D);
model2.speedDisplayFaceNormals();
glDisable(GL_TEXTURE_2D);
glPopMatrix();
glPopMatrix();
//Aircraft
glPushMatrix();
glTranslatef(eyeX,eyeY-5,eyeZ);
glRotatef(-heading, 0,1,0);
glRotatef(-elevation, 1,0,0);
glEnable(GL_TEXTURE_2D);
model.speedDisplayFaceNormals();
glDisable(GL_TEXTURE_2D);
//Bounding box
glBegin(GL_QUADS);
glVertex3f(-6, -2, -6);
glVertex3f(6, -2, -6);
glVertex3f(6, -2, 6);
glVertex3f(-6, -2, 6);
glEnd();
glPopMatrix();
我最初的想法是在飞机底部有一个飞机,在飞机底部有一个飞机,然后检测它们碰撞的时间应该很容易。您可以看到我已经在飞机底部添加了一架飞机,但是,随着飞机位置的移动,飞机也会移动,如何在飞机移动时获得飞机的当前坐标? 或者我应该采取不同的方式来解决这个问题?我很清楚如何在物体移动时获得坐标时如何执行检测
答案 0 :(得分:4)
OpenGl和碰撞检测是两个完全不同的东西。 OpenGl为您完成绘图部分,但您可以跟踪对象位置,以便进行碰撞检测。
通常会发生一种对象类,它包含平移向量,缩放向量和旋转向量(指定所有三个轴的旋转)。您可以自己更新它们,然后将结果传递给opengl绘图代码。
好像你已经在使用(eyeX,eyeY-5,eyeZ)
因为飞机似乎是在眼睛位置绘制的。所以我看不出实际问题是什么......
编辑: 如果要变换平面的顶点,则需要从平移和旋转中创建变换矩阵,并将顶点乘以此矩阵。网上有很多关于如何做到这一点的资源。