2014-06-09 6 views
0

왜 첫 번째 코드는 작동하지만 두 번째 코드는 작동하지 않습니까? 코드는 정점 셰이더에 있습니다.VertexShader에서 mat4로 작업

첫 번째 코드 :

gl_Position = ProjectionMatrix * ViewMatrix * ModelMatrix * vec4(Position, 1.0); 

두 번째 코드 : 매트릭스 생성자에 대한 GLSL 스펙에서

mat4 View = mat4(
     ViewMatrix[0][0], ViewMatrix[1][0], ViewMatrix[2][0], ViewMatrix[3][0], 
     ViewMatrix[0][1], ViewMatrix[1][1], ViewMatrix[2][1], ViewMatrix[3][1], 
     ViewMatrix[0][2], ViewMatrix[1][2], ViewMatrix[2][2], ViewMatrix[3][2], 
     ViewMatrix[0][3], ViewMatrix[1][3], ViewMatrix[2][3], ViewMatrix[3][3] 
    ); 

gl_Position = ProjectionMatrix * View * ModelMatrix * vec4(Position, 1.0); 

답변

2

:

매트릭스의 구성 요소는 구성과 열 주요 순서로 소비됩니다.

첫 번째 4 개의 부동 소수점은 새 행렬의 첫 번째 열을 정의하지만 그 첫 번째 행을 지정합니다. ViewMatrix으로 변경하여 View을 설정하고 있습니다.

이것은 C 구문 및 배열 규칙을 절대적으로 반영합니다.

+0

derhass가 말하고자하는 것은 의도하지 않게 행렬을 전 환한 것이므로 일이 엉망이된다는 것입니다. – datenwolf

+0

@ datenwolf : 바로 그거야. 나는 실제로 거기에 transposing에 대한 문장을했지만, 어떻게 든 대답을 보내기 전에 그것을 망쳤다. 나는 그것을 더 분명하게하기 위해 그것을 편집했다. – derhass