# Instanced rotation?

This topic is 2229 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

Hello,everyone,I am having some confusion about instsancing.I learned it from this example:
//////////////////////////////////////////////////////////////////////////////// // Filename: texture.vs //////////////////////////////////////////////////////////////////////////////// ///////////// // GLOBALS // ///////////// cbuffer MatrixBuffer { matrix worldMatrix; matrix viewMatrix; matrix projectionMatrix; }; ////////////// // TYPEDEFS // ////////////// struct VertexInputType { float4 position : POSITION; float2 tex : TEXCOORD0; float3 instancePosition : TEXCOORD1; }; struct PixelInputType { float4 position : SV_POSITION; float2 tex : TEXCOORD0; }; //////////////////////////////////////////////////////////////////////////////// // Vertex Shader //////////////////////////////////////////////////////////////////////////////// PixelInputType TextureVertexShader(VertexInputType input) { PixelInputType output; // Change the position vector to be 4 units for proper matrix calculations. input.position.w = 1.0f; // Update the position of the vertices based on the data for this particular instance. input.position.x += input.instancePosition.x; input.position.y += input.instancePosition.y; input.position.z += input.instancePosition.z; // Calculate the position of the vertex against the world, view, and projection matrices. output.position = mul(input.position, worldMatrix); output.position = mul(output.position, viewMatrix); output.position = mul(output.position, projectionMatrix); // Store the texture coordinates for the pixel shader. output.tex = input.tex; return output; } 

I dont get it..like,why does he change the input structure with the instance data instead of just editing the output one with the instance data like this:
output.position.x += input.instancePosition.x; output.position.y += input.instancePosition.y; output.position.z += input.instancePosition.z;
?
Also,if this IS the proper way to do it,then would rotation be done in the same way?(by changing the input structure).Then again,I'm not sure about how rotation would be implemented,maybe create a rotation matrix for each instance for each vertex,using a float3 instanceRotation variable and trig functions?

##### Share on other sites
There's no difference between the two ways. Changing the input structure doesn't actually change the vertices, it just changes them from the point of view of that single shader function.

##### Share on other sites

Also,if this IS the proper way to do it,then would rotation be done in the same way?(by changing the input structure).Then again,I'm not sure about how rotation would be implemented,maybe create a rotation matrix for each instance for each vertex,using a float3 instanceRotation variable and trig functions?

You can either pass rotational values (euler or quaternion) as a shader variable input and create the matrix on the GPU, or use these values on the CPU to produce the final world matrix, and pass the matrix as a float4x4 to the shader.

1. 1
2. 2
Rutin
25
3. 3
4. 4
5. 5

• 9
• 13
• 19
• 14
• 9
• ### Forum Statistics

• Total Topics
632940
• Total Posts
3009328
• ### Who's Online (See full list)

There are no registered users currently online

×