游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2421|回复: 8

学习ShadowMapping中的问题

[复制链接]

39

主题

120

帖子

120

积分

注册会员

Rank: 2

积分
120
发表于 2007-12-16 16:35:00 | 显示全部楼层 |阅读模式
大家好。我在学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-&gtresent(NULL,NULL,NULL,NULL);
        return true;
}
渲染结果如附件所示。。有人知道原因吗。 [em6]
sf_2007121616355.jpg

39

主题

120

帖子

120

积分

注册会员

Rank: 2

积分
120
 楼主| 发表于 2007-12-16 16:36:00 | 显示全部楼层

Re:学习ShadowMapping中的问题

另外,在全白的中间的是一架飞机模型。

0

主题

228

帖子

285

积分

中级会员

Rank: 3Rank: 3

积分
285
发表于 2007-12-17 10:53:00 | 显示全部楼层

Re:学习ShadowMapping中的问题

可能是没把深度缩放到0~1之间吧
改成这样试试OUT.fDepth = OUT.vPosition.z / OUT.vPosition.w;

39

主题

120

帖子

120

积分

注册会员

Rank: 2

积分
120
 楼主| 发表于 2007-12-17 17:58:00 | 显示全部楼层

Re:学习ShadowMapping中的问题

感谢楼上的朋友,不过我改过后还是同样的结果,不知为何

39

主题

120

帖子

120

积分

注册会员

Rank: 2

积分
120
 楼主| 发表于 2007-12-17 22:35:00 | 显示全部楼层

Re:学习ShadowMapping中的问题

大家帮帮忙~我需要你们的智慧!

0

主题

228

帖子

285

积分

中级会员

Rank: 3Rank: 3

积分
285
发表于 2007-12-18 10:40:00 | 显示全部楼层

Re:学习ShadowMapping中的问题

齐次除法后深度应该缩放到0~1之间了,奇怪了,期待高人解决

39

主题

120

帖子

120

积分

注册会员

Rank: 2

积分
120
 楼主| 发表于 2007-12-18 23:51:00 | 显示全部楼层

Re:学习ShadowMapping中的问题

这次我把vs和ps封装到effect里再载入使用,可是结果还是一样。

struct OUTPUT_VERTEX
{
float4 position : POSITION;
float4 fDepth : TEXCOORD0;
};
matrix g_matWorldViewPro;
OUTPUT_VERTEX VS(float4 vposition : POSITION)
{
    OUTPUT_VERTEX OUT;
    OUT.position = mul(vposition,g_matWorldViewPro);
    OUT.fDepth = OUT.position.z;
    return OUT;
}
float4 PS(OUTPUT_VERTEX IN):COLOR0
{
return (IN.fDepth,IN.fDepth,IN.fDepth,1.0f);
}

technique techShadow
{
    pass p0
    {
        fvf = XYZ | NORMAL | TEX1;
           vertexshader  = compile vs_2_0 VS();
           pixelshader = compile ps_2_0 PS();
    }
}

该怎么办呢。

34

主题

629

帖子

629

积分

高级会员

Rank: 4

积分
629
发表于 2007-12-19 01:34:00 | 显示全部楼层

Re:学习ShadowMapping中的问题

z/w要在PS里除

39

主题

120

帖子

120

积分

注册会员

Rank: 2

积分
120
 楼主| 发表于 2007-12-19 12:34:00 | 显示全部楼层

Re:学习ShadowMapping中的问题

是的,除过了,结果还是一样。我贴的是没除的,不过除的己经试过了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-18 07:16

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表