3d碰撞检测帮助openGL

时间:2011-12-12 11:38:49

标签: collision-detection

我有一个载体对象和一个可通过键盘输入控制的平面,我希望能够检测到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();

我最初的想法是在飞机底部有一个飞机,在飞机底部有一个飞机,然后检测它们碰撞的时间应该很容易。您可以看到我已经在飞机底部添加了一架飞机,但是,随着飞机位置的移动,飞机也会移动,如何在飞机移动时获得飞机的当前坐标? 或者我应该采取不同的方式来解决这个问题?我很清楚如何在物体移动时获得坐标时如何执行检测

1 个答案:

答案 0 :(得分:4)

OpenGl和碰撞检测是两个完全不同的东西。 OpenGl为您完成绘图部分,但您可以跟踪对象位置,以便进行碰撞检测。

通常会发生一种对象类,它包含平移向量,缩放向量和旋转向量(指定所有三个轴的旋转)。您可以自己更新它们,然后将结果传递给opengl绘图代码。

好像你已经在使用(eyeX,eyeY-5,eyeZ) 因为飞机似乎是在眼睛位置绘制的。所以我看不出实际问题是什么......

编辑: 如果要变换平面的顶点,则需要从平移和旋转中创建变换矩阵,并将顶点乘以此矩阵。网上有很多关于如何做到这一点的资源。