Xna 顶点着色器中的着色器执行在像素着色器之前停止

Xna 顶点着色器中的着色器执行在像素着色器之前停止,xna,shader,Xna,Shader,我试图从灯光的角度在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 RenderShadowM

我试图从灯光的角度在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
是包含灯光角度的所有变换的
矩阵。
显然问题出在
mul(vPos,xShadowMapLight)原因如果我更改
标识
的矩阵,则着色器将进入像素

知道为什么会这样吗

提前感谢,,
沃尔弗里多

像素着色器无法运行的原因只有一个:光栅化器认为像素落在视口之外。在您的示例中,
NEAR_PLANE
FAR_PLANE
modelTransform.Translation
有哪些值?我的心理调试能力告诉我你的模型可能会在近平面上剪辑。