I have a quick questions: How do I multiply the three matrices world, view and projection correctly in the shader? I've these matrices given as float 4x3 , and all I'm trying to do is to get a WorldViewProjection-Matrix in the HLSL-shader (I'm using instancing so no pre-shader-multplying is possible):
However I keep getting the error-message that a float 4x3 can't be converted into 4x4. Somehow logical, I'm multiplying some 4x3-matrices, how should that go into a 4x4. Well.. does anyone know how to do so? If I set any of the given matrices to 4x3 I can't set them anymore (they stay 0 for all values in this case according to PIX). Any ideas?
Just use 4x4 matrices, I never used 4x3 matrices...
Projection matrix is a 4x4 matrix so it makes sense to use 4x4 matrices, also, a vertex position in homogeneous space is stored in a 4D vector.
This is how I do it:
float4 posWS = mul(float4(vIn.posL,1.0f), gWorld);
float4 posVS = mul(posWS, gView);
vOut.posH = mul(posVS, gProj);
Thanks, I already thought that the projection matrix is a 4x4 matrix as I read it in some tutorials, however I wondered why my shader would only accept a 4x3-projection matrix from the main program. I found out that there was an issue going on with the settings of the matrices: I'm using the directx9 effect pool, and in the effect file I asign my matrix too the projection matrix was set to 4x3, and in the one I am working on its 4x4. Now its working as I expected.
Using a 4x3 won't really save you anything, since each row of the matrix will end up getting aligned to 16-byte boundaries which means it will take up the same space as a 4x4. However for future reference, you can always just convert a 4x3 to a 4x4 in your shader code and the shader compiler will do the right thing: