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

📄 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 + -