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)開始水分離。
在着色器中我需要做什麼才能獲得世界頂點的實際位置?
就像以前一樣工作!非常感謝你。 – Nyatra 2012-04-04 05:38:30