作者:StrongCoding
邮箱:StrongCoding@qq.com DX群:130302441
若文中有误,请告知.十分感谢.一起加油.
这一篇,主要是针对其中的比较重要,可能是你比较模糊的概念或者代码片段的重要分析:
一、ALPHABLEND
(1) 在渲染模板镜子的时候曾用到了混合
Device->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_ZERO );
Device->SetRenderState( D3DRS_DSTBLEND, D3DBLEND_ONE );
上面这个东西实际上是阻止写入到后缓存,这是网上人说的,依我的测试,这个东西仅仅是混合镜子而已,并没有网上说的那 样 子。
(2) 在渲染茶壶的时候也用到了混合
Device->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_DESTCOLOR );
Device->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_ZERO );
二、关于是否开启深度的问题
我们之前在渲染茶壶的时候,之前曾关闭了深度缓存写的功能。这是一个需要重点解释的一个东西:
因为那个镜子的深度值我们没有设置是为0的,也就是没有深度值的;而我们的茶壶是有深度值的;也就意味着茶壶会在镜子后被 渲染,我们是看不到的,被镜子给挡住了;再是茶壶的模板值为1,也就注定了它仅仅会在镜子那个面被渲染。最终导致了我们对 于反射的茶壶是看不到的。