我试图从灯光的角度将模型的深度信息存储在 XNA 中。该模型使用普通着色器渲染良好。
这是着色器代码
float4x4 xShadowMapLight;
///DEPTH MAP
float4 RenderShadowMapPS( VS_SHADOW_OUTPUT In ) : COLOR
{
return float4(1,0,0,0); //In.Depth.x,In.Depth.x,In.Depth.x,0);
}
VS_SHADOW_OUTPUT RenderShadowMapVS(float4 vPos: POSITION)
{
VS_SHADOW_OUTPUT Out;
Out.Position = mul(vPos, xShadowMapLight);
Out.Depth.x = 1-(Out.Position.z/Out.Position.w);
return Out;
}
technique ToonShaderDepthMap
{
pass P0
{
VertexShader = compile vs_2_0 RenderShadowMapVS();
PixelShader = compile ps_2_0 RenderShadowMapPS();
}
}
这就是我生成传递给着色器的光矩阵的方式。
Matrix view = Matrix.CreateLookAt(modelTransform.Translation, new Vector3(0, 500, 75), Vector3.Up);
Matrix projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 1.0f, (float)globals.NEAR_PLANE, (float)globals.FAR_PLANE);
Matrix ShadowMapLight = modelTransform * view * projection;
但显然我并不总是进入像素着色器,并且由于某种原因它停止在顶点中。(我已经修改了像素着色器以始终输出一个红色像素,所以我知道它什么时候通过)。
xShadowMapLight
是Matrix
包含从灯光的角度来看的所有变换。显然,mul(vPos, xShadowMapLight);
如果我将矩阵更改为Identity
着色器到达像素的矩阵,则问题出在原因上。
知道为什么会发生这种情况吗?
在此先感谢,沃尔弗里多。