第 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度
- 这里学到的知识是,角度计算虽然不怎么耗性能,但是基本的数学原理优化性能会很有帮助