2013-03-20 51 views
0

這可能是也可能不是一個非常愚蠢的問題,所以我很抱歉,但我還沒有在任何書籍或教程中遇到過。此外,我想這可以適用於任何語言......像素運動C++

假設你創建大小的窗口:640x480和對象/形狀裏面大小32x32的,你就能夠在移動形狀與周圍的鍵盤輸入窗口。

用什麼來控制形狀的運動Type(int,float ...)有什麼關係嗎?顯然,你不能在一個像素的中途畫圖,但是如果你將形狀移動0.1f(例如使用glTranslation函數),應該如何將它移動一個int of 1 ......它將渲染的形狀移動1/10像素還是?

我希望我已經解釋過了,不要被人嘲笑。

我只問這是因爲它會影響程序或潛在遊戲的碰撞檢測和其他功能的精度。

回答

1

glTranslate通過x y z產生翻譯。將當前矩陣(glMatrixMode)乘以該平移矩陣,產品替換當前矩陣,就好像glMultMatrix用其參數調用以下矩陣:

1 0 0 x 0 1 0 y 0 0 1 z 0 0 0 1 如果矩陣模式爲GL_MODELVIEW或GL_PROJECTION,則在調用glTranslate之後繪製的所有對象都將被轉換。

使用glPushMatrix和glPopMatrix來保存和恢復未轉換的座標系。

這意味着glTranslate會給你一個翻譯,與當前矩陣一起使用,產生非十進制數。你不能使用半個像素。 glTranslate接受double或float,所以如果你想在x,y或z中移動它1,只需給函數一個float 1或double 1作爲參數。

http://www.opengl.org/sdk/docs/man2/xhtml/glTranslate.xml

1

最重要的原因,使用浮點或雙精度來表示定位是後臺計算。如果你用整數繼續計算你的位置,你不僅需要使用轉換步驟來重新整理。你也會丟失數據每x步數

0

如果你想動畫你的精靈每個更新有小於1像素的移動,那麼你需要使用浮點數,否則你將不會有任何移動。你的繪圖函數很可能會四捨五入到最接近的整數,所以它可能與此無關。然而,你當然可以繪製到亞像素精度!