游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1655|回复: 4

模板问题:这样产生的阴影行不行?

[复制链接]

125

主题

364

帖子

396

积分

中级会员

Rank: 3Rank: 3

积分
396
QQ
发表于 2006-4-27 14:51:00 | 显示全部楼层 |阅读模式
HRESULT CMyD3DApplication::Shadow()
{
    m_pd3dDevice->SetRenderState(D3DRS_STENCILENABLE,true);
    m_pd3dDevice->SetRenderState(D3DRS_STENCILFUNC,D3DCMP_EQUAL);
    m_pd3dDevice->SetRenderState(D3DRS_STENCILREF,0x0);
        m_pd3dDevice->SetRenderState(D3DRS_STENCILMASK,0xFFFFFFFF);
        m_pd3dDevice->SetRenderState(D3DRS_STENCILWRITEMASK,0xFFFFFFFF);
        m_pd3dDevice->SetRenderState(D3DRS_STENCILZFAIL,D3DSTENCILOP_KEEP);
        m_pd3dDevice->SetRenderState(D3DRS_STENCILFAIL,D3DSTENCILOP_KEEP);
        m_pd3dDevice->SetRenderState(D3DRS_STENCILPASS,D3DSTENCILOP_INCR);

        //写入模板
        m_pd3dDevice->SetRenderState(D3DRS_ZENABLE,false);
    //计算指定模型的阴影矩阵
        D3DXVECTOR3 vPoint(0,0,0);
    D3DXVECTOR3 vNormal(0.0f,-1.0f,0.0f);

    D3DXPLANE plane;
    D3DXPlaneFromPointNormal( &plane, &vPoint, &vNormal ); //生成这个平面

        //D3DXPLANE groundPlane(0.0f,-1.0f,0.0f,0.0f);
       
   
        D3DXMATRIX s,W;
        D3DXPLANE ground;
       
        D3DXMatrixShadow(&s,&vecLightDir,&plane);
        W = m_matHelicopterMatrix * s;
        W =  W * m_matTerrainMatrix;
        m_pd3dDevice->SetTransform(D3DTS_WORLD,&W);

       

    m_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,true);
    m_pd3dDevice->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_SRCALPHA);
        m_pd3dDevice->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);

       
    D3DMATERIAL9 mtrl;
        ZeroMemory(&mtrl,sizeof(mtrl));
        mtrl.Ambient = mtrl.Diffuse = D3DXCOLOR(0.0f,0.0f,0.0f,0.0f);
        mtrl.Diffuse.a = 0.5f;
       
   
        //设置材质
        m_pd3dDevice->SetMaterial(&mtrl);
        m_pd3dDevice->SetTexture(0,0);
    m_Teapot->DrawSubset(0);

       
        m_pd3dDevice->SetRenderState(D3DRS_ZENABLE,true);
        m_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,false);
        m_pd3dDevice->SetRenderState(D3DRS_STENCILENABLE,false);
        return S_OK;
}

我在W =  W * m_matTerrainMatrix;这里又多乘了个地板的矩阵,但是
我总想像书上那样产生,可是书上的就是不对劲。

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
发表于 2006-4-27 19:53:00 | 显示全部楼层

Re:模板问题:这样产生的阴影行不行?

模板阴影需要地面矩阵吗?......

125

主题

364

帖子

396

积分

中级会员

Rank: 3Rank: 3

积分
396
QQ
 楼主| 发表于 2006-4-28 00:33:00 | 显示全部楼层

Re:模板问题:这样产生的阴影行不行?

hdm2968 是这样的,我想把阴影投射到地面啊。我不加个地面矩阵,阴影就总在模型上。
就是 模型上有个阴影。  有什么方法吗? 我也是不得以为之

0

主题

237

帖子

237

积分

中级会员

Rank: 3Rank: 3

积分
237
发表于 2006-4-28 12:03:00 | 显示全部楼层

Re:模板问题:这样产生的阴影行不行?

不用????, 你要的不是"地面matrix", 你已有shadow matrix, 先?⑽锛?atrix??出?? 例如 objmatrix, 然後 objmatrix._42 ?p去 物件radius.y, 最後 w = shadow * objmatrix 就可以了.

另外, LZ的vNormal(0.0f,-1.0f,0.0f), 永?都是平面, 如果地形有斜面就??鲥e, ?得很奇怪的了, 希望你不是????"奇怪"....

125

主题

364

帖子

396

积分

中级会员

Rank: 3Rank: 3

积分
396
QQ
 楼主| 发表于 2006-4-29 10:54:00 | 显示全部楼层

Re:模板问题:这样产生的阴影行不行?

当然不是了,我是想做平面的阴影。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-24 08:36

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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