我正試圖學習如何在OpenGL中的3D點上進行一些轉換。使用this cheat sheet我相信我有正確的矩陣乘以我想要旋轉的向量。但是,當我乘坐並打印新的座標時,我認爲這是不正確的。 (旋轉1,0,0 90度cc應該導致0,1,0正確?)爲什麼這不起作用?爲什麼我的矢量不能正確旋轉OpenGL/GLM?
我的代碼:
glm::vec4 vec(1.0f, 0.0f, 0.0f, 1.0f);
glm::mat4 trans = {
1.0f, 0.0f, 0.0f, 0.0f,
0.0f, cos(glm::radians(90.0f)), -sin(glm::radians(90.0f)), 0.0f,
0.0f, sin(glm::radians(90.0f)), cos(glm::radians(90.0f)), 0,
0.0f, 0.0f, 0.0f, 1.0f
};
vec = trans * vec; //I should get 0.0, 1.0, 0.0 right?
std::cout << vec.x << ", " << vec.y << ", " << vec.z << std::endl;
上面打印1.0, 0.0, 0.0
表明沒有變化呢?我也嘗試在GLM中使用rotate
函數生成我的矩陣,而不是手動指定,但我仍然沒有得到我認爲應該是正確的(我得到了一個不同的錯誤答案)。
glm::mat4 trans = glm::rotate(trans, 90.0f, glm::vec3(0.0, 0.0, 1.0)); //EDIT: my bad, should've been z axis not x, still not working
上面打印:-2.14..e+08, -2.14..e+08, -2.14..e+08
(PS:我只是把幾何在上一學年,我道歉,如果數學是不正確我有矩陣和矩陣乘法,我選了一個基本的瞭解。今天學習OpenGL轉換,但其他的,然後我在這種排序)
如果輸入是(1,0,0,1)並且輸出應該是(0,1,0,1),那麼你的旋轉應該在Z軸周圍。 –
@HannesHauptmann好吧,我試着做出這樣的改變,但它仍然沒有返回正確答案'glm :: mat4 trans = glm :: rotate(trans,90.0f,glm :: vec3(0.0,0.0,1.0)) ;' –
在左側看到OpenGL如何處理它。我是100%這是圍繞Z軸的旋轉:) –