3

resultAがresultBと等しくないのはなぜですか?何が間違っているのかわかりません。説明をお願いします。

float alpha = glm::radians(45.0f);

glm::mat4 xRot(glm::vec4(1, 0, 0, 0),
               glm::vec4(0, glm::cos(alpha), glm::sin(alpha), 0),
               glm::vec4(0, -glm::sin(alpha), glm::cos(alpha), 0),
               glm::vec4(0, 0, 0, 1));

glm::mat4 yRot(glm::vec4(glm::cos(alpha), 0, -glm::sin(alpha), 0),
               glm::vec4(0, 1, 0, 0),
               glm::vec4(glm::sin(alpha), 0, glm::cos(alpha), 0),
               glm::vec4(0, 0, 0, 1));

glm::vec4 vec(0, 0, -100, 1);

glm::vec4 resultA(0.0f);
glm::vec4 resultB(0.0f);

resultA = xRot  * yRot * vec; //(-70.7107, 50, -50, 1)
resultB = yRot  * xRot * vec; //(-50, 70.7107, -50, 1)
4

1 に答える 1

3

3D回転は、非常に特殊な場合を除いて、一般的に通勤しません。したがって:

xRot * yRot != yRot * xRot

基本的に、上記で行っていることは、ポイントを証明することです:)

ここを参照してください:http://en.wikipedia.org/wiki/Commutative_property

于 2012-04-09T15:07:30.457 に答える