2015-04-04 75 views
0

你好,我是OpenGL的新手,我需要一些幫助......我發現在任何地方翻譯3D空間中的物體時,都應該使用乘以頂點的模型矩陣。但如果我這樣做,我的程序奇怪(沒有任何翻譯)。如果我嘗試頂點乘以模型矩陣,那麼翻譯就起作用。我的問題在哪裏?OpenGL翻譯glm右側還是左側?

// Wrong program nothing translate 
(Cpp main) 
glm::mat4 M; 
M = glm::translate(M, glm::vec3(-0.5f, -0.5f, -0.5f)); 
glUniformMatrix4fv(modelMatrixID, 1, GL_TRUE, glm::value_ptr(M)); 

(Vertex shader) 
in vec4 pos; 
uniform mat4 mM; 
gl_Position = mM*pos; 

如果我的頂點着色器我改變了...它的工作原理

gl_Position = pos*mM; 

回答

1

glUniformMatrix4fv()選擇了第三個參數,如果你要轉置矩陣上傳的一部分。由於您使用GL_TRUE此值:

glUniformMatrix4fv(modelMatrixID, 1, GL_TRUE, glm::value_ptr(M)); 

你的矩陣將在上載過程中被調換。將矩陣/矢量轉換的操作數的順序交換爲pos * mM補償正在轉置的矩陣。

glUniformMatrix4fv(modelMatrixID, 1, GL_FALSE, glm::value_ptr(M)); 
+0

謝謝:

如果你想堅持到更爲常見mM * pos爲了乘法的,你只需要使用GL_FALSE的說法,引起基質,而不在這個過程中被調換到上傳救了我 :) – 2015-04-04 08:52:33