1

ライトの観点から、モデルの深度情報を 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、ライトの視点からのすべての変換が含まれています。シェーダーがピクセル 1 に到達mul(vPos, xShadowMapLight);するマトリックスを変更すると、明らかに問題が発生します。Identity

なぜこれが起こるのでしょうか?

前もってありがとう、ワルフリド。

4

0 に答える 0