簡體   English   中英

Opengl使用局部旋轉

[英]Opengl using local rotation

我一直試圖讓旋轉工作,它似乎工作,我的問題發生在我然后嘗試移動對象時,我期望對象的軸與網格一起旋轉但是它保持全局軸並繼續移動該軸上的對象。 我對輪換的理解有缺陷嗎? 或者它是導致這種情況發生的代碼,如果我的理解是問題是有一種方法來轉換對象軸與對象。 我的代碼如下。

Projection= glm::perspective(45.f, 4.0f / 3.0f, 0.1f, 100.0f);

//position and direction are calculated based on mouse position
View      = glm::lookAt(
position,
position+direction,
up
);
glm::mat4 myMatrix = glm::translate(x,y,z);
glm::mat4 myScalingMatrix = glm::scale(0.2f, 0.2f ,0.2f);
glm::vec3 myRotationAxis( 0, 1, 0);
glm::mat4 tempModel = glm::mat4(1.f);
glm::mat4 myRotationMatrix =glm::rotate( tempModel,45.f, myRotationAxis );

glm::mat4 Model= myMatrix* myRotationMatrix *myScalingMatrix;

glm::mat4 MVP = Projection* View * Model;

查看矩陣乘法順序,因為順序很重要。 在您的情況下,首先縮放,然后旋轉對象,最后根據全局軸移動它。 通過切換乘法,您可以先移動,然后將整個局部坐標系旋轉所需的角度,不僅會產生一個旋轉,而且還會導致運動軸旋轉。

glm::mat4 Model= myRotationMatrix * myMatrix *myScalingMatrix;

關於這個問題的一些參考。

由於旋轉矩陣僅適用於以原點為中心的旋轉(即(0,0,0)),因此需要以往復方式將原點切換到對象的中心。

假設您的對象位於(X,Y,Z)。 然后,如果您想要居中旋轉到該對象,您需要首先翻譯(-X,-Y,-Z),然后進行旋轉,然后將(X,Y,Z)平移回原始位置,以便對您的對象執行旋轉中心。

這張照片顯示了它的實際工作原理: 在此輸入圖像描述

以下是包含上述圖片的鏈接 ,其中還包含一些有關旋轉的基礎知識。

在我的情況下,我只是繪制一個簡單的三角形並玩轉換。 當我的三角形有坐標時:

{0.0,2.0,-10.0,
-2.0,-2.0,-10.0,
2.0,-2.0,-10.0};

縮放按照你的說法進行,因為它相對於中心0.0,0.0,0.0進行縮放。 沿y軸的旋轉也搞亂了。 明顯的解決方法是向后移動相機並將物體放在中心。

{0.0,2.0,0.0,
-2.0,-2.0,0.0,
2.0,-2.0,0.0};

這是一個微不足道的案例,在關注所有數學的同時很容易被忽視。 因此,請確保您的對象位於中心。

暫無
暫無

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

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