2014-07-06 6 views
0

참조 http://webglfundamentals.org/webgl/lessons/webgl-3d-orthographic.html 벡터 셰이더에는 mat4vec4의 곱셈이 있습니다.glsl에서 벡터로 행렬 곱셈

attribute vec4 a_position; 

uniform mat4 u_matrix; 

void main() { 

    // Multiply the position by the matrix. 

    gl_Position = u_matrix * a_position; 

} 

4x4 매트릭스에 1x4 매트릭스를 어떻게 곱할 수 있습니까? 아니요 gl_Position = a_position * u_matrix;

누구든지 설명 할 수 있습니까?

답변

4

From the GLSL spec 1.017

5.11 벡터와 몇 가지 예외를 제외하고 행렬 연산

이 작업은 구성 요소 현명하다. 연산자가 벡터 또는 행렬에서 작동 할 때 벡터 또는 행렬의 각 구성 요소에서 독립적으로 구성 요소 방식으로 작동합니다.

... 벡터로 곱해진 행렬, 행렬로 곱한 벡터 및 행렬로 곱한 행렬. 이것들은 구성 요소별로 작동하지 않고 오히려 정확한 선형 대수 곱셈을 수행합니다. 피연산자 일치의 크기가 필요합니다.

vec3 v, u; 
mat3 m; 

u = v * m; 

u.x = dot(v, m[0]); // m[0] is the left column of m 
u.y = dot(v, m[1]); // dot(a,b) is the inner (dot) product of a and b 
u.z = dot(v, m[2]); 

그리고

u = m * v; 

동등하면

u.x = m[0].x * v.x + m[1].x * v.y + m[2].x * v.z; 
u.y = m[0].y * v.x + m[1].y * v.y + m[2].y * v.z; 
u.z = m[0].z * v.x + m[1].z * v.y + m[2].z * v.z; 
동등