posts - 124,  comments - 29,  trackbacks - 0

1:地板透明化注:透明物体最后画出
    g_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,TRUE );
    g_pd3dDevice->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_SRCALPHA );
    g_pd3dDevice->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);

2:画出反射对象注:一份顶点数据通过矩阵变换画出反射对象
 D3DXMATRIXA16 tmp;
 D3DXMatrixScaling(&tmp,1,-1,1);//通过放缩矩阵来实现倒影(或D3DXMatrixReflect(&tmp,&plane);)

3:Stencil Buffer 模板缓存启用Stencil Buffer保证转到地板下面时看不到实际存在的反射物体以免漏馅
镜面既要最先画又要最后画,那么画两遍,最先画时设置Aphha混合如下不改变后台缓存只是在模板缓存中标记镜面区域为1.
最先画地板时:
 //设置模板缓存
 g_pd3dDevice->SetRenderState(D3DRS_STENCILENABLE,true);
 g_pd3dDevice->SetRenderState(D3DRS_STENCILFUNC,D3DCMP_ALWAYS);
 g_pd3dDevice->SetRenderState(D3DRS_STENCILREF,0x1);
 g_pd3dDevice->SetRenderState(D3DRS_STENCILMASK,0xffffffff);
 g_pd3dDevice->SetRenderState(D3DRS_STENCILWRITEMASK,0xffffffff);
 g_pd3dDevice->SetRenderState(D3DRS_STENCILZFAIL,D3DSTENCILOP_KEEP);
 g_pd3dDevice->SetRenderState(D3DRS_STENCILFAIL,D3DSTENCILOP_KEEP);
 g_pd3dDevice->SetRenderState(D3DRS_STENCILPASS,D3DSTENCILOP_REPLACE);
 

 //绘制地板镜面
 g_pd3dDevice->SetRenderState(D3DRS_ZENABLE, FALSE);
 g_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,TRUE);
 g_pd3dDevice->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_ZERO);
 g_pd3dDevice->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_ONE);
绘制物体影像时启用模板缓存并对其函数状态进行设置:
     g_pd3dDevice->SetRenderState(D3DRS_STENCILENABLE,true);
     g_pd3dDevice->SetRenderState( D3DRS_STENCILFUNC,D3DCMP_EQUAL);
最后在渲染时照常:
    g_pd3dDevice->SetStreamSource( 0, obj.g_pVB, 0, sizeof(CUSTOMVERTEX) );
    g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
    g_pd3dDevice->SetIndices( obj.g_pIB );
    g_pd3dDevice->SetTexture( 0, g_pTexture[obj.textureID] ); //设置纹理
    g_pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,obj.numOfVertex,0,obj.numOfFace);
其中 g_pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,obj.numOfVertex,0,obj.numOfFace);这句话根据模板缓存的设置及开启情况,写入后台缓冲区的同时写入模板缓存。或在与模板缓存中数据比较后决定是否要往后台缓冲区中写。

posted on 2008-05-17 19:25 天书 阅读(1960) 评论(3)  编辑 收藏 引用

FeedBack:
# re: D3D中镜面反射效果实现
2008-05-18 23:34 | 灵魂机器
严重关注中。。  回复  更多评论
  
# re: D3D中镜面反射效果实现
2008-09-23 17:15 | 1234
能把你的镜面效果的完整代码发给我么?455633182@qq.com  回复  更多评论
  
# re: D3D中镜面反射效果实现
2009-06-05 13:10 | Leaf
要是能看一下效果图就更易理解了  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



<2008年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用链接

留言簿(5)

随笔档案

文章分类

文章档案

好友的Bolg

搜索

  •  

最新评论

阅读排行榜

评论排行榜