跳到主要内容
← Math

Math

90-Degree Rotation

求原点到把手的向量,然后逆时针转90度

实时渲染 · 2D 片段 HLSL

第 6 课:90-Degree Rotation

我的解:求原点到把手的向量,然后逆时针转90度

我的解

cbuffer Uniforms : register(b0) {
  float2 iResolution;
  float iTime;
};

struct PSInput {
  float4 position : SV_Position;
};

float circle(float2 c, float2 uv) {
  return 1.0 - smoothstep(0.19, 0.2, distance(c, uv));
}

float4 main(PSInput input) : SV_Target {
  float2 uv = input.position.xy / iResolution.xy;
  uv *= 2.0;
  uv -= 1.0;
  uv.x *= iResolution.x / iResolution.y;

  float2 gun    = float2(0.0, -0.5);
  float2 handle = float2(0.9, sin(iTime) * 0.7);

  float t = frac(iTime);
  float speed = 3.0;

  float2 p =  gun + float2(-normalize(handle-gun).y,normalize(handle-gun).x)*t*speed;

  float3 shapeColor = float3(01.0, 0.3, 0.3);
  float3 backColor = float3(0.12, 0.12, 0.12);
  float3 result = lerp(backColor, shapeColor, circle(p, uv));

  return float4(result, 1.0);
}

复盘笔记

  • 求原点到把手的向量,然后逆时针转90度
  • 这里学到的知识是,角度计算虽然不怎么耗性能,但是基本的数学原理优化性能会很有帮助