Shader "Custom/twist"
{
SubShader
{
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "unitycg.cginc"
struct v2f
{
float4 pos : POSITION;
float4 color : COLOR0;
};
v2f vert(appdata_base v)
{
float angle = length(v.vertex) * _SinTime.w;
//旋转矩阵
//float4x4 m =
//{
// float4(cos(angle), 0, sin(angle), 0),
// float4(0, 1, 0, 0),
// float4(-sin(angle), 0, cos(angle), 0),
// float4(0, 0, 0, 1),
//};
//对旋转矩阵进行优化计算,其实就是手动的进行旋转矩阵的相乘的结果
float x = cos(angle) * v.vertex.x + sin(angle) * v.vertex.z;
float z = cos(angle) * v.vertex.z - sin(angle) * v.vertex.x;
v.vertex.x = x;
v.vertex.z = z;
//v.vertex = mul(m, v.vertex);
v2f o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
o.color = fixed4(0, 1, 1, 1);
return o;
}
fixed4 frag(v2f IN) : COLOR
{
return IN.color;
}
ENDCG
}
}
FallBack "Diffuse"
}
效果如下(需要运行):
继续改造代码,呈现一些不同的效果:
修改 22 行如下:
float angle = length(v.vertex) * _Time.y;
float x = sin(angle) * v.vertex.x;
运行后效果如下(类似水波的效果):