2017-12-27 15 views
0
glm::vec4 x = glm::vec4(0.0f, 0.0f, 1.0f, 0.0f); 
glm::vec4 y = glm::vec4(0.0f, 1.0f, 0.0f, 0.0f); 
glm::vec4 z = glm::vec4(-1.0f, 0.0f, 0.0f, 0.0f); 
glm::vec4 t(0.0f, 0.0f, 0.0f, 1.0f); 

glm::mat4 rot(x, y, z, t); 
glm::vec4 test = rot * glm::vec4(10.0f, 0.0f, 0.0f, 1.0f); 

「テスト」変数は(0.0f、0.0f、-10.0f、1.0f)である必要がありますが、返される結果は(0.0f、0.0f、10.0f、1.0f)です。これはglmのバグですか?3Dベクトルを変換するときにglmが間違った結果をもたらすのはなぜですか?

+0

」 * "test"変数は(-10.0f、0.0f、0.0f、1.0f)でなければなりませんが、返される結果は(10.0f、0.0f、0.0 f、1.0f)。* "入力行列と入力頂点が与えられてもどちらの答えも正しくありません。この行列は明らかにY軸の周りに何らかの形のフリップを行います。したがって、X成分のみのベクトルはZ成分のベクトルになります。 –

+0

Nicol Bolasありがとう、間違いました。 "test"変数は(0、0、-10、1)でなければなりません。しかし、出力は(0、0、10、1) – minpu

答えて

0

実際の結果は(0, 0, 10, 2)ではありませんか?基本的には、ベクトルを行列倍することは、行列の列とベクトルの係数との線形結合を意味します。だから、

rot * glm::vec4(10.0f, 0.0f, 0.0f, 1.0f) 

あなたの例では、私はあなたが4つのベクトルxyz、そしてtは「行ベクトル」ですが、それは彼ら表示されていることを想定しているとし

10.0f * x + 0.0f * y + 0.0f * z + 1.0f * t 
1

に相当します「列ベクトル」である。したがって、行列rotは最も可能性が高いです:

列ベクトルに乗じ
x y z t 
__________ 
0 0 -1 0 
0 1 0 0 
1 0 0 0 
0 0 0 1 

10 
0 
0 
1 

は列ベクトルを与える:

0 
0 
10 
1 

EDIT:固定反転用語

関連する問題