⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shadow.fx

📁 《3D游戏编程》随书光盘 12章: 设计阴影的多种技巧, 有详细源代码
💻 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 + -