实现
cbuffer Transform : register(b0) {
float4x4 modelMatrix;
float4x4 modelViewMatrix;
float4x4 projectionMatrix;
float iTime;
};
struct VSInput {
float3 position : Position;
float3 normal : NORMAL;
};
struct VSOutput {
float4 position : SV_Position;
float4 normal : TEXCOORD0;
};
float4x4 RotZ(float a)
{
float s = sin(a);
float c = cos(a);
return float4x4(
c,-s, 0, 0,
s, c, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1
);
}
VSOutput main(VSInput input) {
VSOutput output;
float4 localPos = float4(input.position, 1.0);
localPos = mul(RotZ(-iTime),localPos);
float4 viewPos = mul(modelViewMatrix, localPos);
output.position = mul(projectionMatrix, viewPos);
float4 localNormal = mul(RotZ(-iTime), float4(input.normal,1.0));
float4 viewNormal = mul(modelMatrix, localNormal);
output.normal = viewNormal;
return output;
}