上图:
和之前的cookie差不多,是种投影仪的感觉,阴影也可以靠这个实现。
下面是代码:
Shader "Custom/ShaderExample13"
{
Properties
{
_ShadowTex ("Projected Image", 2D) = "white" {}
}
SubShader
{
Pass
{
Blend Zero OneMinusSrcAlpha
GLSLPROGRAM
uniform sampler2D _ShadowTex;
uniform mat4 _Projector;
#ifdef VERTEX
//顶点着色器
out vec4 positionInProjSpace;
void main()
{
positionInProjSpace = _Projector * gl_Vertex;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
#endif
#ifdef FRAGMENT
//片元着色器
in vec4 positionInProjSpace;
void main()
{
if (positionInProjSpace.w > 0.0) //在projector的前面
{
gl_FragColor = texture2D(_ShadowTex, vec2(positionInProjSpace) / positionInProjSpace.w);
}
else //在projector后面
{
gl_FragColor = vec4(0.0);
}
}
#endif
ENDGLSL
}
}
}