2012-04-04 28 views
2

我有VBOs來分割我的世界,有點像遊戲暗黑破壞神。我曾經將頂點數據本身設置爲世界上的確切位置,但隨着位置的增長,浮點數學錯誤也隨之增加。VBO和glTranslatef在GLSL着色器中的gl_vertex是否需要與某些東西相乘?

我現在已經改變了它,所以頂點數據是相對於0,0,0,我使用glTranslatef來設置每個VBO到玩家周圍的正確位置。

glPushMatrix(); 
glTranslatef(m_X, m_Y, m_Z); 
draw VBO 
glPopMatrix(); 

這使得讓玩家的X和Z軸位置總是範圍0-512(1 VBO的物理尺寸)內,因爲他們離開它,世界移動相反的方向。這很好,並修復了浮點錯誤,但它引入了一個新的錯誤。

在我的着色器中,我通過將頂點的X和Z位置的cos/sin乘以時間變量並用它們修改Y位置來創建一個像波浪一樣的水波。

uniform float timeVar; 
... 
vec4 v = vec4(gl_Vertex); 
v.y += (sin(v.x+timeVar*2)+cos(v.z+timeVar))*2-5; 
... 
gl_Position = gl_ModelViewProjectionMatrix * v; 

就在這個時候頂點位置是精確的工作,但現在我懷疑他們是在範圍0-512內,因爲這是他們都設置爲之前我他們的glTranslatef到它們的實際位置。這使得波仍然出現,但是現在在VBO的邊緣處,自從cos(0)!= cos(512)開始水分離。

在着色器中我需要做什麼才能獲得世界頂點的實際位置?

回答

1

作爲制服傳入世界的位置。

+0

就像以前一樣工作!非常感謝你。 – Nyatra 2012-04-04 05:38:30