2014-10-04 108 views
0

我做了如下轉變:GL數學:GLM旋轉功能旋轉整個座標系

// Translate my cube to origin 
myCubeModelMatrix = glm::translate(myCubeModelMatrix, vec3(-pos.x, -pos.y , -pos.z)) ; 

// Rotate cube about Y axis 
myCubeModelMatrix = glm::rotate(myCubeModelMatrix , vec3(0,1,0)) ; 

// Translate back to original position 
myCubeModelMatrix = glm::translate(myCubeModelMatrix, vec3(pos.x, pos.y , pos.z)) ; 

問題:
第二步,在那裏我旋轉立方體,它的實際旋轉整個座標系統。因此,第三步不能將我的魔方恢復到原來的位置。繞Y軸後0,0,0
位置::

觀測輸出:
立方體的初始位置:翻譯到原點之後 X,Y,Z
位置 0 「試圖」 後0,0
位置平移回原來的位置: SomeOtherX,Y,SomeOtherZ

請注意,在最終反向平移後,X和Z座標現在與原始座標不同,而Y座標與原始座標相同。所以我的推論是圍繞Y軸的旋轉實際上旋轉了整個座標系,因此X和Z已經改變,但是Y沒有改變。

我在這裏做錯了什麼?如果旋轉做到這一點,我所有的任意軸旋轉將失敗。

+0

這個問題是離題,因爲它涉及到數學,而不是編程。 – 2014-10-04 11:05:56

+0

這個問題是關於一個流行的數學庫如何表現。數學在這裏很明顯。 – 2014-10-04 11:08:33

+1

@sanjeevmk:如果數學對你很清楚,你就不會按錯誤的順序來乘以這些矩陣:) – derhass 2014-10-04 12:37:16

回答

1

您沒有指定Y軸的旋轉量, 並且如果您已經緩存位置和旋轉,則可以使用類似這樣的東西。

glm::mat4 translation = glm::translate(glm::mat4(), glm::vec3(pos.x, pos.y, pos.z)); 
glm::mat4 rotation = glm::rotate(glm::mat4(), rotationAmount, glm::vec3(0, 1, 0)); 

myCubeModelMatrix = translation * rotation; 

當然你可以優化它,但我從來沒有使用glm,所以這取決於你。