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

时间:2013-01-11 11:51:28

标签: 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 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;

但显然我并不总是到达像素着色器,并且由于某种原因它停在顶点。 (我修改了像素着色器,总是输出一个红色像素,所以我知道它何时通过)。

xShadowMapLightMatrix,包含灯光视角下的所有变换。 显然问题出在mul(vPos, xShadowMapLight);,如果我更改了Identity的矩阵,则着色器会到达像素一。

知道为什么会这样吗?

提前致谢, Walfrido。

0 个答案:

没有答案