簡體   English   中英

GL Math:GLM旋轉功能旋轉整個坐標系

[英]GL Math : GLM rotate function rotates the entire coordinate system

我做了以下轉換:

// 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) ) ;

問題:
第二步,旋轉立方體,實際上是旋轉整個坐標系。 因此,第三步無法將我的多維數據集恢復到原始位置。

觀察到的輸出:
立方體的初始位置: X,Y,Z
轉換為原點后的位置: 0,0,0
繞Y軸旋轉后的位置: 0,0,0
“嘗試”以轉換回原始位置后的位置: SomeOtherX,Y,SomeOtherZ

請注意,在最終反向平移之后,X和Z坐標現在與原始坐標不同,而Y坐標與原始坐標相同。 因此,我的推論是繞Y軸的旋轉實際上已經旋轉了整個坐標系,因此X和Z發生了變化,而Y卻沒有變化。

我在這里做錯了什么? 如果這樣做,我所有的任意軸旋轉都會失敗。

您沒有指定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,所以這取決於您。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM