您的位置:首页 > 其它

untiy 3d ShaderLab_第9章_1_平面阴影(二) 点光源对平面的投影

2016-09-28 15:23 323 查看
9.2点光源对平面的投影

光源的方向矢量

    上一节是平行光的情形,点光源也是类似的,对于通过使用WorldSpaceLightDir()方法来计算光源方向来说,就完全一样了。

 

      
pass {
Tags { "LightMode" = "ForwardAdd" }
Blend DstColor SrcColor
Offset -2,-1
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
float4x4 _World2Ground;
float4x4 _Ground2World;
float4 vert(float4 vertex: POSITION) : SV_POSITION
{
float3 litDir;
litDir=normalize(WorldSpaceLightDir(vertex));
litDir=mul(_World2Ground,float4(litDir,0)).xyz;
float4 vt;
vt= mul(_Object2World, vertex);
vt=mul(_World2Ground,vt);
vt.xz=vt.xz-(vt.y/litDir.y)*litDir.xz;
vt.y=0;
vt=mul(_Ground2World,vt);//将计算结果返回到世界坐标
vt=mul(_World2Object,vt);
return mul(UNITY_MATRIX_MVP, vt);
}
float4 frag(void) : COLOR
{
return float4(0,0.6,0,1);//绿色的阴影
}
ENDCG
}

如图,红色的是平行光的投影,绿色的是场景中点光源的投影。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐