我在想如何在我的OpenGL應用程序中做碰撞檢測,並得出結論,我應該保留兩個我的幾何數據副本。OpenGL:處理碰撞檢測和頂點數據的建議?
1)首張複印:只支持OpenGL渲染purposes.This可以保存爲VBO,頂點索引(保存在GPU)
2)第二個副本:我保存客戶端(在一個類中,比如說3DEntity),我執行所有測試,包括邊界框碰撞測試,光線投射,
因此,在我加載一個網格數據(比如從一個OBJ文件)之後,首先準備「第一個副本」然後使用「頂點索引」準備「第二個副本」。 (例如:如果我的網格是一個簡單的立方體,我的「第一個副本」將有8個頂點,並使用頂點索引來正確渲染它。但是我的「第二個副本」將有36個頂點。因爲我必須做射線在三角形上投射)
我在「3DEntity」中保留了一個轉換矩陣,以保持我的「3d實體」的Position,Rotation..etc等狀態。 所以在僞代碼中;
class 3DEntity {
Vertex[] verticesForPhysics;
Matrix tranformationMatrix;
}
我保持固定「verticesForPhysics」值。(手段,它總是在模型座標系)。所以,當我想移動,旋轉,我的實體,我只是改變「transformationMatrix」。
當進行像碰撞檢測這樣的測試時,我通過將「verticesForPhysics」乘以「transformationMatrix」給出世界座標中的頂點,再次製作頂點的臨時副本。
Vertex[] verticesForPhysicsInWorld=transformationMatrix * verticesForPhysics;
現在我用這些「verticesForPhysicsInWorld」做我的測試。
這是處理這個問題的正確方法嗎? 我擔心通過保留兩個副本併爲碰撞檢測測試製作另一個臨時副本來實現數據冗餘。 其他OpenGL遊戲引擎如何處理?
如果它有效,那麼它是正確的。 –
我想知道這是否是最好的方法?通過保留兩份副本,我擔心數據冗餘,並再次爲碰撞檢測測試創建臨時副本。 –