rtt粒子渲染不正常的一系列问题

1、模型人物的alpha值为什么是正确的,它的alpha来源是哪儿?

这是rtt渲染出的图片:
image 
这是对应的alpha值,可见模型的alpha是正确的,而粒子的alpha值不对应。因此CEGUI将这个image混合到背景图片后粒子显示就不正常了。
LVD~6HF)VA35E~0Z{I8RP%0

2、下面我们研究重点研究模型和粒子的alpha来源。

2.1、对于一般模型有
原则:如果模型的纹理贴图含有alpha通道,则混合后的rtt纹理的alpha就是纹理的alpha;
         如果模型的纹理贴图不含alpha通道,则混合后的rtt纹理的alpha来自材质的diffuse的alpha。
(参考Dx9文档
IDirect3DDevice9::SetTextureStageState

D3DTSS_ALPHAOP [指定了本层纹理的alpha来源,默认来自arg1,就是以上原则。]
         Texture-stage state is a texture alpha blending operation identified by one member of the D3DTEXTUREOP enumerated type. The default value for the first texture stage (stage 0) is D3DTOP_SELECTARG1, and for all other stages the default is D3DTOP_DISABLE.

D3DTSS_ALPHAARG1

Texture-stage state is the first alpha argument for the stage, identified by by D3DTA. The default argument is D3DTA_TEXTURE. If no texture is set for this stage, the default argument is D3DTA_DIFFUSE. Specify D3DTA_TEMP to select a temporary register color for read or write. D3DTA_TEMP is supported if the D3DPMISCCAPS_TSSARGTEMP device capability is present. The default value for the register is (0.0, 0.0, 0.0, 0.0).
 
D3DTSS_ALPHAARG2
Texture-stage state is the second alpha argument for the stage, identified by by D3DTA. The default argument is D3DTA_CURRENT. Specify D3DTA_TEMP to select a temporary register color for read or write. D3DTA_TEMP is supported if the D3DPMISCCAPS_TSSARGTEMP device capability is present. The default value for the register is (0.0, 0.0, 0.0, 0.0).



这个可以验证,以身体的材质为例:
material 女主角白丁装_高模_01_身体
{
    technique
    {
        pass
        {
            scene_blend alpha_blend

            texture_unit
            {
                texture 女主角白丁装_高模_01_身体.tga
            }
        }
    }
}
对于上面的rtt图,由于“女主角白丁装_高模_01_身体.tga”不含alpha,因此rtt的alpha来自diffuse,而Ogre默认diffuse 1 1 1 1,因此人物模型的alpha显示全白色。

我们将材质的 diffuse 改为 diffuse 1 1 1 0.4

material 女主角白丁装_高模_01_身体
{
    technique
    {
        pass
        {
            scene_blend alpha_blend
            diffuse 1 1 1 0.4
            texture_unit
            {
                texture 女主角白丁装_高模_01_身体.tga
            }
        }
    }
}
这是混合后的效果,

M1$MIE}[1GT3$@V5GGY(4$C

这是对应的alpha值,可见原则是对的。
4]7M]PJR50@5O(]YZ2$%@46
以上模型为什么能渲染正确的问题解决了,

2.2、粒子的alpha为什么没正确输出?
这个就得研究粒子的渲染原理了,Ogre中粒子是用renderer billboard渲染的,粒子的纹理的颜色一般是在它的affector ColourFading
中随着时间而变化的,这个变化的修改了纹理的像素值包括alpha值。

这个必须要弄清楚两个来源:
(1)最终渲染出的rtt的rgb来源。
(2)alpha的来源。

待续……

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值