2017-12-27 18 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); 

"test"변수는 (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) 

난 당신이 네 개의 벡터 x, y, zt는 "행 벡터"는 것을 가정한다고 가정

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

에 해당하지만, 그것은 그들이 나타납니다 "열 벡터"입니다. 따라서, 매트릭스 rot가 대부분이다

0 
0 
10 
1 

EDIT :

10 
0 
0 
1 

열 벡터 준다 : 열 벡터 승산시

x y z t 
__________ 
0 0 -1 0 
0 1 0 0 
1 0 0 0 
0 0 0 1 

고정 반전 용어