2012-12-06 2 views
0

이해해 주실 수 있으십니까? :) 쉐이더 매트 4 * vec4 계산

정상 로이드는 OpenGL 쉐이더 계산 :

mat4 a; 
vec3 p; 

vec3 pos = (a * vec4(p,1.0)).xyz; 

가 다음과 같이 계산된다 :이 올바른지

pos.x = a0 * p.x + a1 * p.y + a2 * p.z + a3 * 1.0; 
pos.y = a4 * p.x + a5 * p.y + a6 * p.z + a7 * 1.0; 
pos.z = a8 * p.x + a9 * p.y + a10 * p.z + a11 * 1.0; 

? 또는 나는 무엇인가 놓쳤 느냐? 모든 도움을 매우 높이 평가됩니다.

+1

'{{A, B, C, D}, {E, F, G, H} {I, J, K, L} {M, N, O, P}} * = {AW + BX + CY + DZ, EW + FX + GY + ㎐, { X, Y, Z, w} IW + JX + KY + LZ, MW + NX + 오우 + pz} '네, 맞습니다. – Selvin

답변

1

그래서 대답은 "예"입니다.

또한 3 개의 점으로 계산할 수 있습니다.

+0

yea 고마워요. D : 쉐이더 행렬이 어떤 이유로 든 교체되었거나, 오히려 내 코드의 행렬이 아니라고 덧붙여 야합니다. – Kibotu

2

좋아 실제로 내가 찾은 신뢰할 수있는 원본은 : http://www.khronos.org/files/opengles_shading_language.pdf

vec3 v, u; 
mat3 m; 

그리고

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; 

vec3 v, u; 
mat4 m; 
에 해당

그리고

u = (mat * vec4(v,1.0)).xyz 

는 그래도 난 틀렸다면 제발 올바른

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

에 해당해야한다.