游戏开发论坛

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

projective shadow的问题

[复制链接]

16

主题

59

帖子

59

积分

注册会员

Rank: 2

积分
59
发表于 2009-4-22 16:38:00 | 显示全部楼层 |阅读模式
请教一下projective shadow的问题
void Level::GenerateTexture()
{

        D3DXMatrixLookAtLH( &m_matWorld2Light, &m_vLightPos, &y_Player.position, &D3DXVECTOR3(0,1,0) );
        D3DXMatrixPerspectiveFovLH( &m_matTexProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f );


        LPDIRECT3DSURFACE9        p = NULL;
        m_pd3dDevice->GetRenderTarget( 0, &p );
        m_pd3dDevice->SetRenderTarget( 0, m_pSurProj );

        m_pd3dDevice->BeginScene();
        D3DXMATRIXA16        matProjection;
        D3DXMatrixPerspectiveFovLH( &matProjection, D3DX_PI/4, 1.0f, 1.0f, 100.0f );
        //matProjection.m[0][0] = 10;
        //matProjection.m[1][1] = 10;

    m_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(255,255,255), 1.0f, 0 );
        m_pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, FALSE);
        m_pd3dDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );
        m_pd3dDevice->SetRenderState( D3DRS_ZENABLE, FALSE );

        // 渲染为TEXTUREFACTOR颜色
        m_pd3dDevice->SetTexture( 0,NULL );
        m_pd3dDevice->SetRenderState( D3DRS_TEXTUREFACTOR, D3DCOLOR_ARGB(0,128,128,128) );
        m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TFACTOR );
        m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1 );
        m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TFACTOR);
        m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);

        m_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );//matWorld
        m_pd3dDevice->SetTransform( D3DTS_VIEW, &m_matWorld2Light );
        m_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProjection );
        y_Player.Render();

        D3DXMatrixIdentity( &matProjection );
        m_pd3dDevice->SetTransform( D3DTS_WORLD, &matProjection );//matProjection
        m_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );
        m_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );

        m_pd3dDevice->SetRenderState( D3DRS_ZENABLE, TRUE );
        m_pd3dDevice->EndScene();

        m_pd3dDevice->SetRenderTarget( 0, p );
        SAFE_RELEASE( p );
}
这个函数用来生成一张阴影的图 但是我生成的阴影为什么带有人物贴图中的颜色,我不是已经指定其为灰色了吗?

16

主题

59

帖子

59

积分

注册会员

Rank: 2

积分
59
 楼主| 发表于 2009-4-22 16:41:00 | 显示全部楼层

Re:projective shadow的问题

还是projective shadow的问题
生成完这张阴影图后(128*128)怎么正确投影到我的地形上,我的地形是有起伏的贴图大小(1024*1024)。我只是简单的从事例里抄了过来但是效果不对,请教一下各位
void Level::RenderScene()
{
        m_pd3dDevice->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR );
        m_pd3dDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR );
        m_pd3dDevice->SetSamplerState( 1, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR );
        m_pd3dDevice->SetSamplerState( 1, D3DSAMP_MINFILTER, D3DTEXF_LINEAR );

        D3DXMATRIXA16        matWorld;

        //m_matTexProj._11 = 2.0f/100;
        //m_matTexProj._22 = 2.0f/100;
        D3DXMatrixIdentity( &matWorld );
        SetupVSConst( matWorld );

        m_pd3dDevice->SetTexture( 0, scene1.m_pMeshTextures[0] );
        m_pd3dDevice->SetTexture( 1, m_pTexProj );
        m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_SELECTARG1 );
        m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
        m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP,   D3DTOP_SELECTARG1 );
        m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );

        m_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP,   D3DTOP_MODULATE );
        m_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLORARG1, D3DTA_TEXTURE );
        m_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLORARG2, D3DTA_CURRENT );
        m_pd3dDevice->SetTextureStageState( 1, D3DTSS_ALPHAOP,   D3DTOP_DISABLE );

        m_pd3dDevice->SetTextureStageState( 2, D3DTSS_COLOROP,   D3DTOP_DISABLE );
        m_pd3dDevice->SetTextureStageState( 2, D3DTSS_ALPHAOP,   D3DTOP_DISABLE );
        m_pd3dDevice->SetSamplerState( 0, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP );
        m_pd3dDevice->SetSamplerState( 0, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP );
        m_pd3dDevice->SetSamplerState( 1, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP );
        m_pd3dDevice->SetSamplerState( 1, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP );

        m_pd3dDevice->SetVertexDeclaration( m_pDecl );
        m_pd3dDevice->SetVertexShader( m_pVS );
        scene1.Render();
        m_pd3dDevice->SetVertexShader( NULL );

}

12

主题

112

帖子

114

积分

注册会员

Rank: 2

积分
114
发表于 2009-4-22 17:24:00 | 显示全部楼层

Re:projective shadow的问题

y_Player.Render();这个里面把
m_pd3dDevice->SetRenderState( D3DRS_TEXTUREFACTOR, D3DCOLOR_ARGB(0,128,128,128) );
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TFACTOR );
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1 );
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TFACTOR);
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
这些设置冲掉了吧。

7

主题

78

帖子

82

积分

注册会员

Rank: 2

积分
82
发表于 2009-4-22 18:19:00 | 显示全部楼层

Re:projective shadow的问题

用ExponentialShadowMaps吧,简单、高效、效果华丽
我终于放弃了VSM而转投ESM的怀抱

16

主题

59

帖子

59

积分

注册会员

Rank: 2

积分
59
 楼主| 发表于 2009-4-22 22:17:00 | 显示全部楼层

Re:projective shadow的问题

有ExponentialShadowMaps的相关材料吗?我上网怎么查不到

16

主题

59

帖子

59

积分

注册会员

Rank: 2

积分
59
 楼主| 发表于 2009-4-22 22:40:00 | 显示全部楼层

Re: Re:projective shadow的问题

我查看的源程序也是先设置再渲染的啊  不过我人物的渲染用到了勾边 会不会是那出了问题

7

主题

78

帖子

82

积分

注册会员

Rank: 2

积分
82
发表于 2009-4-23 10:44:00 | 显示全部楼层

Re: Re:projective shadow的问题

monkeyboi: Re:projective shadow的问题

有ExponentialShadowMaps的相关材料吗?我上网怎么查不到

用google啊

16

主题

59

帖子

59

积分

注册会员

Rank: 2

积分
59
 楼主| 发表于 2009-4-23 11:31:00 | 显示全部楼层

Re: projective shadow的问题

这个技术是用来渲染静态的吧 场景里要是有个人一直在动的话还可以用这个技术吗?

7

主题

78

帖子

82

积分

注册会员

Rank: 2

积分
82
发表于 2009-4-23 12:40:00 | 显示全部楼层

Re:projective shadow的问题

这个应该没影响吧- -|||
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-20 14:20

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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