I’ve been recently trying to create some 3D rendering code in Silverlight 5 with XNA. Unfortunately I have been having trouble getting anything ( using my custom shader ) to work.
The basic effect is used on a cube and uses only VertexPositionColor information but when I switch to using a custom shader nothing seems to render ( or renders off-screen ).
To try and help myself with this issue I even got hold of the BasicEffect hlsl code but it doesn’t do anything I am not doing.
The code takes in a world, view and projection matrix and multiplies each one by a position in the following order:
float4 pos_ws = mul(position, World);
float4 pos_vs = mul(pos_ws, View);
float4 pos_ps = mul(pos_vs, Projection);
I changed my code to do the same thing ( instead of passing in a single WorldViewProjection matrix ) and my shader uses this to calculate a position and then just applies a color to the pixel. Yet nothing is rendering.
I’m pretty stuck on this, I’m passing ok at basic 3D but passing ok doesn’t seem to cut it! 🙂
So it turns out the issue is fairly simple!
I actually deleted this question initially because I knew the issue was likely my matrices and so it was unlikely I’d get much help!
After some stumbling on google, and more coffee than I’d like to admit to, I found the answer.
XNA transposes it’s matricies on the sly and doesn’t tell you! I had tried transposing the view and projection matrices in some vain hope that I’d know what I was doing but it wasn’t helping.
Instead I now pass in a single WorldViewProjection_Transposed matrix which is calculated using the following.
This seems to work at the moment and I am hoping it is this simple.
I am sure I will come across a million more problems as the models I need to render become more complex but I decided to leave this on in case anyone in a similar situation ( and experience level ) to me is struggling 🙂