跳到主要内容
← Vertex Transformations

Vertex Transformations

Normal Transform

shader-learning 自学第 23 课:Normal Transform

实时渲染 · 网格 HLSL

第 23 课:Normal Transform

实现

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;
}