|
|
我现在想绘制一个矩形阴影 然后让阴影中一部分区域显示不出来 就是类似于遮照这个效果
想用colorOP方式来实现
我第一次渲染时候如下设置,用于渲染阴影
Moo::rc().setRenderState( D3DRS_ALPHATESTENABLE, FALSE );
Moo::rc().setRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
Moo::rc().setRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );
Moo::rc().setRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );
Moo::rc().setRenderState( D3DRS_LIGHTING, FALSE );
Moo::rc().setRenderState( D3DRS_ZWRITEENABLE, FALSE );
Moo::rc().setRenderState( D3DRS_FOGENABLE, FALSE );
Moo::rc().setRenderState( D3DRS_ZFUNC,D3DCMP_LESS );
Moo::rc().setTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG2 );
Moo::rc().setTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
Moo::rc().setTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG2 );
Moo::rc().setTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE );
Moo::rc().setTextureStageState( 1, D3DTSS_ALPHAOP, D3DTOP_DISABLE );
Moo::rc().setTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE );
mesh.draw()....
第二次渲染设置如下,用于在阴影中渲染一块区域 使这个区域颜色和阴影混合后恢复到没有阴影的效果:
Moo::rc().setRenderState( D3DRS_ALPHATESTENABLE, FALSE );
Moo::rc().setRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
Moo::rc().setRenderState( D3DRS_BLENDOP, D3DBLENDOP_REVSUBTRACT );
Moo::rc().setRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
Moo::rc().setRenderState( D3DRS_DESTBLEND, D3DBLEND_ONE);
Moo::rc().setRenderState( D3DRS_LIGHTING, FALSE );
Moo::rc().setRenderState( D3DRS_ZWRITEENABLE, FALSE );
Moo::rc().setRenderState( D3DRS_FOGENABLE, FALSE );
Moo::rc().setRenderState( D3DRS_ZFUNC,D3DCMP_LESS );
Moo::rc().setTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG2 );
Moo::rc().setTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
Moo::rc().setTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG2 );
Moo::rc().setTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE );
Moo::rc().setTextureStageState( 1, D3DTSS_ALPHAOP, D3DTOP_DISABLE );
Moo::rc().setTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE );
mesh.draw()....
两次渲染图形的alpha值和颜色值一致
就是第一次 color=colorRes * aRes + color(Dst) *(1-aRes)
第二次color = color(Dst) *1 - colorRes * aRes
但是最后结果是二次渲染没有任何作用 请大侠帮忙 看看 是什么情况 [em7] |
|