Sign in to follow this  
Plerion

Getting invalid instance matrices in vertex shader

Recommended Posts

Plerion    381

Hello all

 

Im using instancing to draw the opaque parts of of heavily repeated objects. I am running into some problems reading the instance data however.

 

My input structure for the vertex shader is like that:

struct VertexInput
{
	float3 position : POSITION0;
	float4 boneWeights : BLENDWEIGHT0;
	int4 bones : BLENDINDEX0;
	float3 normal : NORMAL0;
	float2 texCoord : TEXCOORD0;
	float2 texCoord2 : TEXCOORD1;

	float4 mat0 : TEXCOORD2;
	float4 mat1 : TEXCOORD3;
	float4 mat2 : TEXCOORD4;
	float4 mat3 : TEXCOORD5;
};

In order to get the position (before view and projection) i do the following:

VertexOutput main(VertexInput input) {
	float4x4 matInstance = float4x4(input.mat0, input.mat1, input.mat2, input.mat3);

	// bone & animation stuff

	position = mul(position, matInstance);
	// ...
}

the animation stuff and the per vertex input data is correct, I modified the last line to be: position = position.xyz + eyePosition + float3(100, 0, 0); and the elements appear correctly in front of my camera.

 

I have checked with the graphics debugger, in my opinion the input data looks correct (im not showing the per vertex stuff, since thats working):

Instance buffer (i checked, its bound):

RhPXaRU.png

 

 

Input Layout:

uYRdd2k.png

 

Im using the DrawIndexedInstanced function.

 

The result is completely wrong however: 

yCLGPj0.png

 

Where should i begin to look at? What could be the reason of this strange behavior?

 

Thanks in advance,

Plerion

Share this post


Link to post
Share on other sites
Plerion    381

Hello again

 

Because i didnt know what else to try i just did a transpose on the instance matrix and what do you know, it works. In retrospect it makes sense, float4x4 is column-major, the float4x4 contstructor takes row-major. Thus i had to pass the matrix entries untransposed compared to view/proj and the rest.

 

Greetings

Plerion

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this