zoukankan      html  css  js  c++  java
  • 粒子作为rtt渲染到cegui

    关键字 cegui rtt particle ogre alpha

    综述 做为rtt的粒子 没有alpha通道 (下文蓝色是具体描述)只有rgb  。粒子和模型同时存在,同时rtt,模型是正确的 有alpha

    研究这个问题大概一个礼拜了 终于有进展了。

    前面如同之前说的ogre 的rtt一样,形成了texture之后并没有放到 material里而是直接传给了ui被setimage了

    粒子效果一直不正确而模型是正确的

      错误1是 开始有黑边,这个是因为粒子的材质没开alpha通道或者通道开的不对

    改完这个bug出现的错误2是  有些影子(其实就是tga里不透明的地方)按照背景的颜色在不该出现的地方狂闪

      这个问题困扰了我很久

      因为我把texture writetofile(.png)来看是对的 ,就认为不是rtt这里的错误 是cegui的渲染模块 调ogre的那部分 做多重纹理的混合那里的参数不对

    改来该去试了很多 外加朋友帮忙 一个理论上我认为可行(朋友试过可行)的解决方案是 把_setSceneBlending(SBF_SOURCE_ALPHA, SBF_ONE_MINUS_SOURCE_ALPHA);

    换成这个_setSceneBlending(SBF_ONE, SBF_ONE); 因为我看过png是黑底的 黑色的rgb值是0 加起来得到的最终值会覆盖掉黑色。所以这样是,可以出现正确效果的。还有是要在cegui的总的渲染模块中判断,判出是此类包含粒子的rtt是 改变渲染参数特殊处理

    但是此时我已经发现个问题。。。我吧texture writetofile(.tga)--试一下 没想到行的!!ogre好强大。。。而且那个 频闪的background颜色的东西 出现明显是  最后混合的时候乘了个 某点的alpha值 而这点不该此时有这个alpha值  就是alpha值不对 所以我想看整个texture 的alpha通道 而.tga里有alpha通道

    保存后我发现 这死玩意 粒子的rgb都对  就alpha不对

    不是没有alpha  而是。。。。一种材质的粒子 只有一张或者两张alpha通道 而这种材质的粒子 实际上 有好几十个 ,而且这唯一的一个(或者2,概率比较低)出现的位置也不对

    我去ogre环境下看发现rtt的粒子是有alpha的    而且ogre版本都是1.7.X

    我就在改所有我能看到的参数,包括材质脚本里的,粒子脚本里的,还有生成rtt时的

    最后发现 是粒子的材质脚本里的light off的缘故,因为 在rtt的时候 模型单独给光了,并且模型一直alpha正确。

    去掉light off以后问题就解决了 就有了alpha通道

    但是这引发了另外一个问题

    粒子接受光的话 它本身的colorfading那些就没用了

    不过这个问题是另外的问题了

    啊 这个问题又让我纠结了 为甚lighting off了 粒子的alpha 就没有和 rgb同步了  数量位置都不对。。。本来以为想到上一个答案我就不会纠结了的

    还是先用小虎的方法把正确效果实现出来再研究吧 

    关于另外一个思路,,场景里和编辑器里的粒子是正确的。。。那里的粒子材质也是lighting off (可不可以只off  rgb啊)为什么可以正确显示。。

       开始 我以为是因为 他们 都是放在 有背景的地方 而不是纯黑 。。。。。纯黑。。。0*总是出问题的还要 把这个问题排除下

             而不是放纯黑的背景 在和别的背景混合。。

    又想出一个解决方案  那个rtt的rectangle带背景图 应该能避免 

    悲催 那方法不行  sbf one one肯定不行  在人物的地方 加起来 的感觉 会像是透明一样   看来必须出来正确的alpha才行 小虎的建议的方法排除了

    每次看见答案 就明白的很快 一开始就想明白就不用费事去一趟了

    visiblityflag mask  particlesystem.setvisibleflag(uielement)

    这里的visibleflag的set 当updateeffect调用ps的setvf时 是好使的

    当effect的setvf调用ps的setvf时 ps不能获取 在effect的elementlist里 的成员particleelement的成员 particlesystem是空的

    我修改代码让ps始终设置 ui的flag 就是屏蔽此错误 还是不好使 说明不是ps的visible的问题

    所以考虑到小虎的研究结果

    转到colorfading这个affector上,我并不认同他的提出的错误的原因,但是我去掉colorfading之后粒子显示alpha正常了,就像去掉material的liaght off一样 显示白色粒子

    so 我试着 修改了colorfading里color 的alpha全部改成1 就 好了。。。。很囧的

       之前做粒子编辑器的时候 粒子的材质 设置不同的混合方式 就可以用 白色底的图 或者黑色底的图。。。

    这里的好了是指粒子的alpha正常 并且 有颜色(按照colorfading) 但是粒子和之前不一样了 粒子边上有些暗 但是应该能接受的 这个是由于alpha通道的大小 之类的 

    总之这个问题就算解决了

  • 相关阅读:
    java 后端博客系统文章系统——No5
    啃碎并发(11):内存模型之重排序
    java 后端博客系统文章系统——No4
    啃碎并发(10):内存模型之内部原理
    java 后端博客系统文章系统——No3
    啃碎并发(九):内存模型之基础概述
    啃碎并发(八):深入分析wait&notify原理 猿码架构
    快速平方根倒数算法
    查找:哈希表
    注意力机制论文 --- Crop leaf disease recognition based on Self-Attention convolutional neural network
  • 原文地址:https://www.cnblogs.com/minggoddess/p/1941942.html
Copyright © 2011-2022 走看看