跳到主要内容
← Vertex Transformations

Vertex Transformations

Scale Matrix

shader-learning 自学第 13 课:Scale Matrix

实时渲染 · 网格 HLSL

第 13 课:Scale Matrix

我的解

cbuffer Uniforms : register(b0) {
  float iTime;
  float4x4 viewMatrix;
  float4x4 projectionMatrix;
};

struct VSInput {
  float3 position : Position;
};

struct VSOutput {
  float4 position : SV_Position;
  float3 worldPos : POSITION0;
};

VSOutput main(VSInput input) {
  VSOutput output;
  float PI = 3.14;

  float3 c1 = float3(1.0, 0.0, 0.0) * (sin(iTime-PI/2.0)+2.0);
  float3 c2 = float3(0.0, 1.0, 0.0) * ((cos(iTime)+1.0)/2.0);
  float3 c3 = float3(0.0, 0.0, 1.0)* (sin(iTime-PI/2.0)+2.0);

  // expects columns
  float3x3 transform = float3x3(c1, c2, c3);

  float3 worldPos = mul(
    input.position, // expects row
    transform       // expects columns
  );
  float4 viewPos  = mul(viewMatrix, float4(worldPos, 1.0));
  output.position = mul(projectionMatrix, viewPos);
  output.worldPos = worldPos;

  return output;
}