2011-03-28 3 views
3
나는 두더지를 이해하려고 노력하고있어,이 행렬에 의해 여러 정점을하고 싶습니다

말 :두더지 쉐이더

"m44 vt0, va0, vc0\n" + 
"mul op, vt0, vc1\n"; 

그리고 :

output = theVertex * scaleMatrix * rotationMatrix 

임과 같이 보일 것입니다 내 버텍스 쉐이더를 추측 행렬을 설정할 것입니다.

context3d.setProgramConstantsFromMatrix(Context3DProgramType.VERTEX, 0, scaleMatrix); 
context3d.setProgramConstantsFromMatrix(Context3DProgramType.VERTEX, 1, rotationMatrix); 

그러나 작동하지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

실은 내가 셰이더를 적용하기 전에 매트릭스를 여러 개 만들 수 있지만 AGAL을 이해하려고합니다.

건배

답변

4

m44 매트릭스는 각 레지스터 128bits (4 수레)와 같이 4 개 레지스터 소요 그래서 당신은 VC4 레지스터로 회전 행렬을로드 할 수 있고, 4 × 4의 수레입니다 :

"m44 vt0, va0, vc0\n" + 
"mul op, vt0, vc4\n"; 

context3d.setProgramConstantsFromMatrix(Context3DProgramType.VERTEX, 0, scaleMatrix); 
context3d.setProgramConstantsFromMatrix(Context3DProgramType.VERTEX, 4, rotationMatrix); 
+0

굉장히 감사합니다. – user346443

+1

두 번째 명령어가'm44'가 아니어야합니까? –

+0

두 번째 명령어는 m44이어야합니다. 그리고 행렬을 만드는 방법에 따라 대부분의 경우 setProgramConstantsFromMatrix의 마지막 "transpose"매개 변수를 true로 설정하려고합니다. – starmole