2011-12-12 70 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) 因爲這架飛機似乎被畫在眼睛的位置。所以我沒有看到實際的問題是什麼......

編輯: 如果你想轉換平面的頂點,你需要創建一個轉換矩陣和旋轉,並乘以頂點這個矩陣。網上有很多關於如何做到這一點的資源。