當使用GLM_GTX_vector_angle的glm :: orientedAngle時,我遇到了以下問題。 我只想繞Y軸旋轉。我想旋轉的是最初指向正Z軸的對象(例如,沿矢量(0.0, 0.0, 1.0)
)。物體的當前方向由不斷變化的矢量dir
(歸一化)定義。輪換是根據(0.0, 1.0, 0.0)
完成的。所以,glm :: rotatedAngle中的所有矢量都是常量,除了dir。下面是我發現:當x改變符號時,glm orientedAngle給出了大不相同的結果
代碼:
glm::orientedAngle(glm::vec3(0.0f, 0.0f, 1.0f), dir, glm::vec3(0.0f, 1.0f, 0.0f))
結果不同的dir
S:
dir: (-0.00960893,-0.15582,-0.987739) -> rot: -171.018
dir: (-0.00342022,-0.155258,-0.987868) -> rot: -171.066
dir: (0.00282073,-0.154685,-0.98796) -> rot: 171.1
dir: (0.00874247,-0.154136,-0.988011) -> rot: 171.119
注意方向變化dir
時的符號x座標改變。 -171和171遠沒有相同的角度(-171 + 360 = 189
),所以18度左右。這是什麼造成的?矢量只改變0.005左右的增量,其他增量的大小不會影響旋轉度。任何幫助表示讚賞。代表問題
最小編譯代碼:
#include <iostream>
#include <glm/glm.hpp>
#include <glm/gtx/vector_angle.hpp>
int main(void)
{
std::cout << "Results: " << std::endl;
std::cout << glm::orientedAngle(
glm::vec3(0.0f, 0.0f, 1.0f),
glm::normalize(glm::vec3(-0.000209185,0.32454,-0.945872)),
glm::vec3(0.0f, 1.0f, 0.0f)
) << std::endl;
std::cout << glm::orientedAngle(
glm::vec3(0.0f, 0.0f, 1.0f),
glm::normalize(glm::vec3(0.0214591,0.326289,-0.945026)),
glm::vec3(0.0f, 1.0f, 0.0f)
) << std::endl;
return 0;
}
感謝您的輸入。你和我的例子的區別在於你的兩個向量相距甚遠。爲了將我的例子應用到你的例子中,想象兩個向量幾乎直接指向'(0.0002,1.0)'和'(-0.0002,1.0)'。他們都應該有一個大約90度的角度 –