2011-12-12 5 views
0

나는 키보드 입력으로 제어 할 수있는 항공기 객체와 비행기를 가지고 있습니다. 항공기에 착륙 할 수 있도록 2 사이의 충돌을 감지 할 수 있기를 원합니다. 3d 충돌 감지 도움말 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) 으로 작업하고있는 것처럼 보입니다. 따라서 실제 문제가 무엇인지 알 수는 없습니다 ...

편집 : 평면의 꼭지점을 변환하려면 변환 및 회전에서 변형 행렬을 만들어서 정점에 곱해야합니다. 이 매트릭스. 이 작업을 수행하는 방법에 대한 온라인 자료가 많이 있습니다.