2011-12-12 126 views
0

我有一个载体对象和一个可以通过键盘输入控制的平面,我想能够检测到2之间的碰撞,所以我可以着陆在载体上。这是我的代码:三维碰撞检测帮助openGL

//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(); 

我最初的想法是在飞机的底部有一个平面,一个在载体的顶部,当他们碰撞应该很容易然后检测。你可以看到我在飞机的底部增加了一架飞机,但是,随着飞机位置的移动,飞机也将移动,我如何获得飞机当前坐标的移动? 还是有不同的方式我应该去做这件事?我对如何执行检测有了很好的理解,一旦我可以获得协调对象正在移动

回答

4

OpenGl和碰撞检测是两个完全分开的事情。 OpenGl会为你做绘图部分,但是由你来跟踪对象位置,以便你可以进行碰撞检测。

通常发生的事情是您有一个包含平移向量,尺度向量和旋转向量(指定关于所有三个轴的旋转)的对象类。你自己更新这些,然后把结果传给opengl绘图代码。

看起来你已经在做(eyeX,eyeY-5,eyeZ) 因为这架飞机似乎被画在眼睛的位置。所以我没有看到实际的问题是什么......

编辑: 如果你想转换平面的顶点,你需要创建一个转换矩阵和旋转,并乘以顶点这个矩阵。网上有很多关于如何做到这一点的资源。