unity 多视角下的鱼眼效果

比较多的鱼眼效果是用屏幕坐标下的z坐标来做y轴的距离差值。得到的效果如:

参考:https://zhuanlan.zhihu.com/p/359178010?ivk_sa=1024320u

但是,因为他是屏幕空间下的模拟,所以假如你要转换视角时物体的y轴就会不断改变,因为物体在屏幕中的像素改变了。

那么如果要让物体不会因为转视角而改变高度的话,就需要一个统一标准。

1.那么可以想象的就是在世界坐标下,大家的坐标都时确定不变的。

2.根据物体顶点与摄像机的距离来作为半径,来模拟出摄像机为中心的,各个顶点到摄像机的圆。

3.最后再把世界坐标转到屏幕坐标就好了。

整体代码也比较简单。关键在:

float dist = distance(posWorld, _WorldSpaceCameraPos);
float4 posWorld = mul(unity_ObjectToWorld, v.vertex);
posWorld.y += _CurveStrength * dist * dist * _ProjectionParams.x;
o.pos = mul(unity_MatrixVP, posWorld);

猜你喜欢

转载自blog.csdn.net/llsansun/article/details/118088732