我剛剛學了一點GLUT,已經設置了一個可移動的相機,照明&作了class
包含一些3D形式。停止相機在牆壁(或障礙物)上移動
但是現在我想讓相機不能通過這樣的物體。是否有任何類型的OpenGL
或glut
命令,我可以通過該命令檢查在特定點或實際攝像機位置是否存在障礙物?
我剛剛學了一點GLUT,已經設置了一個可移動的相機,照明&作了class
包含一些3D形式。停止相機在牆壁(或障礙物)上移動
但是現在我想讓相機不能通過這樣的物體。是否有任何類型的OpenGL
或glut
命令,我可以通過該命令檢查在特定點或實際攝像機位置是否存在障礙物?
OpenGL是一個光柵化器API,它不會爲您檢查或處理衝突。檢測碰撞的常用方法是邊界框或邊界球。您可以將相機位置視爲點,並檢查它是否位於障礙物的邊界體積內。要獲得邊界球的半徑,必須遍歷模型中的每個頂點並將距離存儲到其中心。你只需要循環一次,而不是每一幀。
OpenGL不是場景圖,這意味着它沒有任何形式的場景或世界的內部表示。 OpenGL是一個繪圖API,它只是逐幀地在幀緩衝區上繪製點,線和三角形 - 然後忘記它們。
因此OpenGL不會爲你做碰撞檢測。它是可能實現使用OpenGL的碰撞檢測系統,但這是你的程序然後,而不是OpenGL。
我解決了我的問題,通過使用一個大的三維布爾數組(20000^3),它存儲信息的塊是..它工作得很好雖然它是偉大的,因爲它永遠不會讀取整個陣列,每個幀只有幾個(正好是6個)元素:D –
@AndiFaust:爲什麼不簡單地測試與常規場景幾何體的碰撞?這當然不是非常困難,而且效率更高。 – datenwolf
我不知道我該怎麼做......你能解釋給我嗎? –
你使用gluLookAt移動你的相機? – Max
不,我已經可以用鼠標和鍵盤移動攝像頭,我希望攝像頭的運動在停止時停止_Stop_。在當前相機位置繪製的立方體,以便凸輪不能移動穿過立方體。 –
據我所知,這是一個困難的課題,我自己還沒有經驗,我正在學習自己。如果問題不夠複雜,可以使用簡單的暴力方法。這可能會有所幫助: http://nehe.gamedev.net/tutorial/collision_detection/17005/ And: http://gamedev.stackexchange.com/questions/13736/tips-for-writing-3d-collision-檢測與opengl – Max