私は、OpenGLの3dポイントでいくつかの変換を行う方法を学ぼうとしています。 Using this cheat sheet私は回転させたいベクトルに乗算するための正しい行列を持っていると思います。しかし、私が新しい貨幣を掛けて印刷するとき、それは間違っていると信じています。 (1,0,0回転すると0,0,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 ok、私はその変更をしようとしましたが、それでも正しい答えを返さない 'glm :: mat4 trans = glm :: rotate(trans、90.0f、glm :: vec3(0.0、0.0、1.0)) ; ' –
左側にOpenGLがどのように処理しているのかが分かります。私は100%ですが、これはZ軸周りの回転です:) –