问一个模版缓存的问题
时间:2011-12-01
来源:互联网
关于模版实现体积阴影的方法,看了这么多,还是很模糊,希望有人给讲解下.
C/C++ code
模版测试是针对当前渲染的所有的像素进行的么?
为什么这里阴影体要绘制2遍呢?绘制完后模版值是多少呢?
我感觉自己完全乱了,求解啊!!!
C/C++ code
//根据轮廓边和光源位置构造阴影体 ...... //渲染地形和飞机模型 ...... //渲染阴影体前面 pd3dDevice->SetRenderState( D3DRS_STENCILFUNC, D3DCMP_ALWAYS ); pd3dDevice->SetRenderState( D3DRS_STENCILPASS, D3DSTENCILOP_INCR ); pd3dDevice->SetTransform( D3DTS_WORLD, pmatWorld ); pd3dDevice->SetFVF( D3DFVF_XYZ ); pd3dDevice->DrawPrimitiveUP( D3DPT_TRIANGLELIST, m_dwNumVertices/3, m_pVertices, sizeof(D3DXVECTOR3) ); //渲染阴影体背面 pd3dDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_CW ); pd3dDevice->SetRenderState( D3DRS_STENCILPASS, D3DSTENCILOP_DECR ); pd3dDevice->SetTransform( D3DTS_WORLD, pmatWorld ); pd3dDevice->SetFVF( D3DFVF_XYZ ); pd3dDevice->DrawPrimitiveUP( D3DPT_TRIANGLELIST, m_dwNumVertices/3, m_pVertices, sizeof(D3DXVECTOR3) ); //恢复渲染状态 pd3dDevice->SetRenderState( D3DRS_SHADEMODE, D3DSHADE_GOURAUD ); pd3dDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_CCW ); pd3dDevice->SetRenderState( D3DRS_ZWRITEENABLE, TRUE ); pd3dDevice->SetRenderState( D3DRS_STENCILENABLE, FALSE ); pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, FALSE ); ...... //渲染阴影 //关闭深度测试, 启用Alpha混合 pd3dDevice->SetRenderState( D3DRS_ZENABLE, false ); pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, true ); pd3dDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA ); pd3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA ); //设置模板相关渲染状态 pd3dDevice->SetRenderState( D3DRS_STENCILENABLE, true ); pd3dDevice->SetRenderState( D3DRS_STENCILREF, 0x1 ); pd3dDevice->SetRenderState( D3DRS_STENCILFUNC, D3DCMP_LESSEQUAL ); pd3dDevice->SetRenderState( D3DRS_STENCILPASS, D3DSTENCILOP_KEEP ); //渲染一个灰色矩形, 只有通过模板测试的像素才会被渲染到颜色缓冲区,表示阴影 pd3dDevice->SetFVF( SHADOWVERTEX::FVF ); pd3dDevice->SetStreamSource( 0, g_pBigSquareVB, 0, sizeof(SHADOWVERTEX) ); pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 ); //恢复渲染状态 pd3dDevice->SetRenderState( D3DRS_ZENABLE, true ); pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, false ); pd3dDevice->SetRenderState( D3DRS_STENCILENABLE, false );
模版测试是针对当前渲染的所有的像素进行的么?
为什么这里阴影体要绘制2遍呢?绘制完后模版值是多少呢?
我感觉自己完全乱了,求解啊!!!
作者: tonywya 发布时间: 2011-12-01
友情帮顶
作者: peng_weida 发布时间: 2011-12-03
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28