查看: 2336|回复: 9

请教如何改变缓冲区中的颜色值?

[复制链接]

该用户从未签到

发表于 2009-2-24 23:08:51 | 显示全部楼层 |阅读模式
请问如何自由的修改颜色缓冲区的RGB值,比如想让红色增强而绿色减弱,有什么好的办法可以较精确的控制吗?
试了一下osg::colorMatrx感觉不起作用,有同志用过吗?

该用户从未签到

发表于 2009-2-25 00:12:39 | 显示全部楼层
不清楚你想实现什么???你读取buffer应该就可以修改~

该用户从未签到

发表于 2009-2-25 09:18:18 | 显示全部楼层
呵呵,个人还是喜欢用着色语言来控制,轻松至极的~~

该用户从未签到

 楼主| 发表于 2009-2-25 11:03:38 | 显示全部楼层
类似于红绿立体显示,只不过想两个缓冲区的颜色自由定制,如果colorMatrix可以的话就很容易实现,但是感觉不起作用,不知道还有别的方法没,希望两位指点

该用户从未签到

发表于 2009-2-25 11:23:00 | 显示全部楼层
ColorMatrix是可以起作用的,它是作为一种渲染属性存在的,不知您是怎么编写它的代码的

该用户从未签到

 楼主| 发表于 2009-2-25 20:31:06 | 显示全部楼层
osg::ColorMatrix* colorMatrix = new osg::ColorMatrix;
    colorMatrix->setMatrix(osg::Matrixd(osg:uat(0.1,1.0,0.1,0.3)));
        osg::StateSet* stateSet = rootnode->getOrCreateStateSet();
        stateSet->setAttribute(colorMatrix, osg::StateAttribute::ON|osg::StateAttribute::OVERRIDE);

感觉不起作用,不知道错误出在哪里。
如果用着色语言的话,可以分别控制两个缓冲区吗?array能不能具体指导一下,先谢谢啦!

该用户从未签到

发表于 2009-2-25 22:34:27 | 显示全部楼层
您指的是多重渲染目标(MRT)的两个颜色数出缓冲区还是什么?如果是那样的话,分别设置gl_FragColor[0]和gl_FragColor[1]就好了,不过不是所有的显卡都支持。
至于您对ColorMatrix的使用是否正确,抱歉暂时我也无法提供更多的信息。这个渲染属性很少被人使用,也许它存在一些和其它属性的冲突也说不定(我简单看了一下它的代码,恐怕是这样的)

该用户从未签到

 楼主| 发表于 2009-2-27 15:33:44 | 显示全部楼层
谢谢array了, 看了一下osg邮件列表,用ColorMatrix存在问题.也很想学习一下怎么使用着色语言,不过对这个确实不在行,请教array如何用着色语言去修改缓冲区的颜色,希望能保留缓冲区的所有信息,包括纹理,光照等等.类似于红绿立体显示,只不过红绿模式使用的是colormask,不胜感激!!! :D

该用户从未签到

发表于 2009-2-27 16:32:30 | 显示全部楼层
修改gl_FragColor就好;不过要完全不改变光照纹理之类的还是比较麻烦的,要写不少代码

该用户从未签到

发表于 2009-2-27 16:38:26 | 显示全部楼层
使用shader肯定能实现,在fragment部分修改一下即可
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表