2010-03-25 25 views
3

說我使用glRotate翻譯基於一些任意用戶輸入的當前視圖(即,如果鍵左側按下然後rtri+=2.5f使用glRotate和glTranslate與碰撞檢測

glRotatef(rtri,0.0f,1.0f,0.0f); 

然後我繪製的三角形中旋轉位置:

glBegin(GL_TRIANGLES); // Drawing Using Triangles 
    glVertex3f(0.0f, 1.0f, 0.0f); // Top 
    glVertex3f(-1.0f,-1.0f, 0.0f); // Bottom Left 
    glVertex3f(1.0f,-1.0f, 0.0f); // Bottom Right 
glEnd(); // Finished Drawing The Triangle 

如何獲得產生的轉換頂點用於碰撞檢測?或者我必須自己手動應用轉換,從而將工作翻倍?

我問的原因是我不介意實現顯示列表。

回答

3

用於碰撞檢測的對象通常不是您用於顯示的對象。他們通常更簡單,更快。
所以是的,要做到這一點的方法是保持手動使用的轉換,但不會因爲對象不同而使工作翻倍。

0

你的遊戲循環應該像(用C++語法):

void Scene::Draw() 
{ 
    this->setClearColor(0.0f, 0.0f, 0.0f); 

    for(std::vector<GameObject*>::iterator it = this->begin(); it != this->end(); ++it) 
    { 
     this->updateColliders(it); 
     glPushMatrix(); 
      glRotatef(it->rotation.angle, it->rotation.x, it->rotation.y, it->rotation.z); 
      glTranslatef(it->position.x, it->position.y, it->position.z); 
      glScalef(it->scale.x, it->scale.y, it->scale.z); 

      it->Draw(); 

     glPopMatrix(); 
    } 

    this->runNextFrame(this->Draw, Scene::MAX_FPS); 
} 

所以,舉例來說,如果我用一個基本的箱式撞機用立方體抽獎方法:

  • 填寫(rgb:(0,0,0))
  • 對於每個對象
    • 計算碰撞中的位置和大小信息
    • 保存實際模型視圖矩陣狀態
    • 變換模型視圖矩陣(旋轉,平移,縮放)
    • 繪製立方體
    • 恢復模型視圖矩陣狀態
    • 檢查FPS,並運行在下一幀正確的時間

**類場景從載體類繼承

我希望它會有所幫助! :)