|
大家好。我在学ShadowMapping的时候遇到这样一个问题。
vertexshader和pixelshader如下:
matrix g_matWorldViewPro;
struct VSOUTPUT_SHADOW
{
float4 vPosition : POSITION;
float fDepth : TEXCOORD0;
};
VSOUTPUT_SHADOW VS_Shadow(float4 inPosition : POSITION)
{
VSOUTPUT_SHADOW OUT = (VSOUTPUT_SHADOW)0;
OUT.vPosition = mul(inPosition,g_matWorldViewPro);
OUT.fDepth = OUT.vPosition.z;
return OUT;
}
float4 PS_Shadow(VSOUTPUT_SHADOW IN):COLOR0
{
return float4(IN.fDepth,IN.fDepth,IN.fDepth,1.0f);
}
载入完毕后,也Set好了,
先渲染到Texture,再取消SHADER,渲染第2次,把TEXTURE贴到平面上,
本来应该是深度颜色不一样的,可是结果却是全白,下面是渲染的代码
BOOL cApp::Frame()
{
int i;
m_pd3dDevice->SetRenderTarget(0,m_DepthSurface);
m_pd3dDevice->Clear(0,NULL,D3DCLEAR_ZBUFFER|D3DCLEAR_TARGET,D3DCOLOR_XRGB(1,1,1),1.0f,0);
m_pd3dDevice->SetRenderState(D3DRS_LIGHTING,FALSE);
m_pd3dDevice->SetRenderState(D3DRS_SPECULARENABLE,FALSE);
m_pd3dDevice->BeginScene();
m_pd3dDevice->SetPixelShader(m_PixelShader);
m_pd3dDevice->SetVertexShader(m_VertexShader);
m_pd3dDevice->SetTexture(0,NULL);
for(i = 0 ; i < m_MeshnMtrls ; i++)
{
m_Mesh->DrawSubset(i);
}
m_pd3dDevice->SetStreamSource(0,m_VertexBuffer,0,sizeof(CUSTOM_VERTEX));
m_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST,0,2);
m_pd3dDevice->EndScene();
//Secon Render
m_pd3dDevice->SetRenderTarget(0,m_BackBuffer);
m_pd3dDevice->Clear(0,NULL,D3DCLEAR_ZBUFFER|D3DCLEAR_TARGET,D3DCOLOR_XRGB(1,1,1),1.0f,0);
m_pd3dDevice->SetRenderState(D3DRS_LIGHTING,FALSE);
m_pd3dDevice->SetRenderState(D3DRS_SPECULARENABLE,TRUE);
Setcamera();
m_pd3dDevice->BeginScene();
m_pd3dDevice->SetVertexShader(NULL);
m_pd3dDevice->SetPixelShader(NULL);
m_pd3dDevice->SetRenderState(D3DRS_LIGHTING,FALSE);
m_pd3dDevice->SetTexture(0,m_DepthMap);
m_pd3dDevice->SetStreamSource(0,m_VertexBuffer,0,sizeof(CUSTOM_VERTEX));
m_pd3dDevice->SetFVF(D3DFVF_XYZ|D3DFVF_TEX1|D3DFVF_NORMAL);
m_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST,0,2);
m_pd3dDevice->EndScene();
m_pd3dDevice-> resent(NULL,NULL,NULL,NULL);
return true;
}
渲染结果如附件所示。。有人知道原因吗。 [em6] |
-
|