顶点着色器中计算顶点的世界坐标,使用的是o.worldPos=mul(unity_ObjectToWorld,v.vertex).xyz。
而使用了内置函数o.worldPos=UnityObjectToWorldDir(v.vertex)计算是错误的。
o.worldPos = UnityObjectToWorldDir(v.vertex);
//源码如下:
// Transforms direction from object to world space
inline float3 UnityObjectToWorldDir( in float3 dir )
{
return normalize(mul((float3x3)unity_ObjectToWorld, dir));
}
————————————————————————————————————————————————————————————————————
o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
区别在于:
前者得到的是归一化后的方向矢量。
后者才是把物体的顶点坐标从模型空间转换到了世界空间!
警告自己以后不要再自作聪明!