游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1177|回复: 0

混合的问题

[复制链接]

2

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2008-12-19 14:13:00 | 显示全部楼层 |阅读模式
我现在想绘制一个矩形阴影 然后让阴影中一部分区域显示不出来  就是类似于遮照这个效果
想用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]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-20 16:12

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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