📄 shadow.fx
字号:
// world * view * projection
float4x4 matWV;
float4x4 matProj;
float4x4 matShadowUV;
// 输入顶点格式
struct VS_IN
{
float3 p : POSITION;
float3 n : NORMAL;
float2 t : TEXCOORD0;
float2 s : TEXCOORD1;
};
// 输出顶点格式
struct VS_OUT
{
float4 p : POSITION;
float4 d : COLOR0;
float2 t : TEXCOORD0;
float2 s : TEXCOORD1;
};
// 顶点着色器
VS_OUT main( VS_IN In )
{
VS_OUT o = (VS_OUT)0;
// matShadowUV : vertex local -> world -> light -> clip space
// 顶点坐标变换为纹理坐标系
// 首先将顶点坐标变换为光源空间裁剪坐标系clip space( -1 ~ 1 )
float4 T = mul( In.p, matShadowUV );
// 将裁剪坐标系变换为纹理坐标系
// clip space(-1 ~ 1) -> tex space( 0 ~ 1 )
o.s.x = (T.x / 2.0f) + 0.5f;
o.s.y = 1.0f - ((T.y / 2.0f) + 0.5f);
// o.s = float2( T.x, T.y ) / 2.0f + 0.5f; // 这样的话,纹理的上下部位就可以翻转过来
// 将顶点坐标变换为摄像机空间裁剪坐标系
float3 P = mul( float4(In.p,1), (float4x3)matWV );
o.p = mul( float4(P,1), matProj );
o.d = 1.0f;
o.t = In.t;
return o;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -