2011-04-23 46 views
2

我正在C++中使用OpenGL編寫帶彈跳球(x和y,不會在Z中彈跳)的屏幕保護程序。當這個球接觸到屏幕邊緣時,球上會出現一小塊傷害。 (當球被損壞時,會發生爆炸。)當球不旋轉時,找到損壞球的部分是容易的部分。從旋轉的邊緣確定點

我爲此決定的算法是,我保持最左邊,最右邊,最頂部和最底部頂點的位置。對於每次碰撞,我顯然需要知道它碰到了哪個屏幕邊緣。在球滾動之前,當它接觸到屏幕邊緣時,如果它碰到屏幕左邊緣,我知道最左邊的頂點是擊中球的點。從那裏,我得到距離該點d距離內的所有頂點。我不需要被擊中的實際頂點,只是球表面上的點。這樣做,我不需要讀取所有頂點,將它們轉換爲球的x,y位置,並查看哪些是不在屏幕上的。做到這一點將解決我所有的問題,但會像地獄一樣緩慢。

目前,球的旋轉由俯仰,偏航和滾轉控制。問題是,由於偏航,俯仰和滾轉角度,球的外表面上的哪個點已經觸及屏幕的邊緣?我已經考慮保持向上,正確和方向矢量,但我完全不熟悉這一點,正如有人可能會注意到的,完全失去了。我已經多次閱讀維基百科上的旋轉矩陣文章,並且仍然畫空白。如果我擺脫了一個旋轉角度會更簡單,但我不想。

回答

0

如果你有你的旋轉角度,那麼你可以在你的代碼中重新創建模型視圖矩陣。使用該矩陣,您可以將旋轉應用到網格的頂點(僅通過乘法),然後像以前一樣查找最左側(或其他)的頂點。

This article解釋瞭如何使用角度構建旋轉矩陣。

+0

對不起,但就像我說過的,我一遍又一遍地讀了,仍然畫空白。我知道我需要什麼,使用偏航,俯仰和滾動的反轉來創建旋轉矩陣,然後將其應用到適當的邊緣頂點(左,右,上,下)。我認爲在過去一週的工作中,我的腦子在思考這個問題。 (不幸的是,我在工作中編寫的程序遠沒有那麼有趣。) – Ross 2011-04-23 21:08:55

+0

我不想對整個模型應用任何東西,因爲它變得非常慢。我的模型有近10,000個頂點。在頂點查找以找到點的x距離內的頂點已經很慢了。我將通過最終生成查找表來加快速度。 – Ross 2011-04-23 21:18:41

相關問題