2012-03-08 70 views
1

我想畫一個太空船在窗口的中心,因爲它通過空間的權力。爲了滾動世界窗口,我使用glOrtho來計算船舶的新位置並以此爲中心放置一個4000x3000的窗口。我的測試是按下前進按鈕並向上移動船。在大多數機器上沒有問題。在一臺速度較慢的Linux筆記本電腦上,我每秒鐘只能拍攝30幀,船舶來回搖晃。比較它相對於鼠標指針(不移動)的位置,可以清楚地看到船向前和向後跳過幾個像素。星星也顯示爲模糊成短線。使用glOrtho進行滾動遊戲。宇宙飛船「不寒而慄」

我想查詢船的中心像素值,看看它是否正在改變。

是否有OpenGL的方式來提供一個世界點,並獲得它將被轉換爲像素點?

回答

1

我會考慮這樣做。將船保持在0,0世界座標,並相對於它移動世界。然後,當窗口大小改變時(相機處於固定位置),您只需要glOrtho調用。除了不必每次計算投影矩陣之外,如果將來您的世界最終會變得龐大,那麼您也可以選擇使用雙精度位置,因爲浮點上的大偏移會導致定位不準確。

要繪製空間場景,然後在繪製任何對象之前操縱模型視圖矩陣,並在繪製船時使用不同的矩陣。

要從世界座標中獲取像素座標,取該點並乘以投影矩陣乘以模型視圖矩陣(確保以正確的方式獲得乘積)。然後,您將得到一個值爲x和y的範圍爲-1到1.您可以添加[1,1]並乘以屏幕大小的一半來獲取像素位置。 (如果你想的話,你可以將它添加到矩陣轉換中)。

+0

+1這是一個新穎的想法。我現在不喜歡這樣做,因爲現在一切都很好,很簡單。我不明白你最後一段的公式。爲什麼加1,然後乘以屏幕尺寸的一半? – ScrollerBlaster 2012-03-08 16:01:59

+2

@ScrollerBlaster:這不是「一種新穎的想法」;它是*如何完成*。幾十年來,遊戲一直在這樣做。 'glOrtho'用於描述視口內視圖的大小(比這更復雜一點)。你想要的是一個跟蹤船舶位置的*相機*。這與'glOrtho'無關。擁有攝像頭在數學上等同於相對於船隻移動世界。 – 2012-03-08 16:23:55

+0

@Nicol我不知道這一點。爲什麼不使用glOrtho移動相機?它當然似乎更直觀。 – ScrollerBlaster 2012-03-08 17:03:02