Xna 顶点着色器中的着色器执行在像素着色器之前停止
我试图从灯光的角度在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
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
有哪些值?我的心理调试能力告诉我你的模型可能会在近平面上剪辑。