Vertex Shader - 几何变换 —顶点位移 实现山峰效果

本文介绍了如何通过顶点着色器进行几何变换,特别是实现山峰效果。虽然由于shader只能读取而不能修改顶点信息,因此无法直接实现碰撞效果。文中提供了一段相关代码来展示这一过程。

最终效果


shader是通过值拷贝的方式获取到顶点信息 所以是无法改变顶点的值 所以也无法实现碰撞效果

代码

Shader "Custom/Test04" {
Properties {
//_Color ("Color", Color) = (1,1,1,1)
//抬升半径
_R("R",Range(0,8)) = 1
//抬升的点的x坐标
_OX("OX",Range(-5,5)) =0
}
SubShader {
pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "unitycg.cginc"
float _Dir;
float _R;
float _OX;
struct v2f{
float4 pos:POSITION;
fixed4 color:COLOR;
};
v2f vert(appdata_base v)
{
//转化成世界空间坐标系
float4 worldPos = mul(unity_ObjectToWorld,v.vertex);
float2 xy =worldPos.xz;
//求物体xy平面上的点到点(_OX,0)的距离
//float d = sqrt((xy.x-_OX)*(xy.x-_OX)+(xy.y-_0)*(xy.y-0));
float d = length(xy-float2(_OX,0));
float higth = _R-d;
higth = _R > d ? higth:0;
float4 newPos = float4(v.vertex.x,higth,v.vertex.z,v.vertex.w);
v2f o;
o.pos = mul(UNITY_MATRIX_MVP,newPos);
o.color = float4(newPos.y,newPos.y,newPos.y,1);
return o;
}
fixed4 frag(in v2f o):COLOR
{
return o.color;
}
ENDCG
}
}
FallBack "Diffuse"
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值