3d помощь при обнаружении столкновений openGL - PullRequest
0 голосов
/ 12 декабря 2011

У меня есть объект-носитель и плоскость, которой можно управлять с помощью ввода с клавиатуры. Я хочу иметь возможность обнаруживать столкновение между двумя, чтобы я мог приземлиться на носитель.Это мой код:

//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 Ответ

4 голосов
/ 12 декабря 2011

OpenGl и обнаружение столкновений - две совершенно разные вещи. OpenGl выполняет рисование, но вы сами должны отслеживать положение объектов, чтобы вы могли обнаруживать столкновения.

Обычно, что происходит, у вас есть класс объекта, который содержит вектор перевода, вектор масштаба и вектор вращения (определяя вращение вокруг всех трех осей). Вы обновляете их самостоятельно, а затем передаете результаты в код рисования opengl.

Кажется, вы уже делаете это с (eyeX,eyeY-5,eyeZ) так как самолет, кажется, нарисован в положении глаз. Так что я не вижу, в чем проблема ...

Edit: Если вы хотите преобразовать вершины плоскости, вам нужно будет создать матрицу преобразования из сдвига и поворотов и умножить вершины на эту матрицу. В Интернете есть множество ресурсов о том, как это сделать.

...