查看: 1654|回复: 3

osg配合GLSL渲染到纹理,输出数据范围问题

[复制链接]

该用户从未签到

发表于 2014-6-18 17:53:23 | 显示全部楼层 |阅读模式
请各位指教一二吧,问题是这样的
我采用osg和GLSL联合编程,有些数据需要在可编程管线中进行计算,算完了之后得到一个二维的浮点数据,然后把该数据传回到CPU中,做进一步处理。
遇到的问题是:传回来的数据不对,比如在片段着色程序中计算的结果为10.
void main()
{
        vec4 color=texture2D(textur,gl_TexCoord[0].st);
        gl_FragColor=10.0f;//vec4(255,0,245,255);
}
当进行渲染到纹理操作后,得到的二维浮点图像除了背景为0值以外,其他值都为1.0,而不是我想要的10.0
渲染到纹理的部分代码如下
        camera->setRenderOrder(osg::Camera:RE_RENDER);
        camera->setReferenceFrame(osg::Transform::ABSOLUTE_RF);
        camera->setRenderTargetImplementation(osg::Camera::FRAME_BUFFER_OBJECT);
        osg::ref_ptr<osg::Image> image = new osg::Image;
        image->allocateImage(100,100,1,GL_LUMINANCE,GL_FLOAT);
        camera->attach(osg::Camera::COLOR_BUFFER,image.get());
根据输出结果可以推断,这样得到的二维浮点图像数据范围在(0,1)之间,而不是我想要的浮点范围内所有数据,请问
我该怎么办?我觉得比较关键的一句代码是
        image->allocateImage(100,100,1,GL_LUMINANCE,GL_FLOAT);
可是该怎么改呢?
另外一个问题是这句代码
vec4 color=texture2D(textur,gl_TexCoord[0].st);
我想知道这个color的范围是什么,是(0,1)还是(0,255),这里texture纹理采用的是读入了bMP格式的rgb图像。
osg中数据范围变来变去,我都搞不清楚它们的范围了,求清楚的大神指点一下吧,跪谢!

该用户从未签到

 楼主| 发表于 2014-6-19 17:07:33 | 显示全部楼层
怎么没有人回答呀?这个问题应该很常见吧

该用户从未签到

 楼主| 发表于 2014-6-20 18:59:13 | 显示全部楼层
osg::ref_ptr<osg::Image> image = new osg::Image;
image->allocateImage(WIDTH,HEIGHT,1,GL_LUMINANCE,GL_FLOAT);
image->setInternalTextureFormat(GL_LUMINANCE32F_ARB);

osg::ref_ptr<osg::Image> image = new osg::Image;
image->allocateImage(WIDTH,HEIGHT,1,GL_RGBA,GL_FLOAT);
image->setInternalTextureFormat(GL_RGBA32F_ARB);
有些地方说要加上setInternalTextureFormat,可是仍然不对,唉,困扰了好几天了,还是解决不了

该用户从未签到

 楼主| 发表于 2014-6-21 20:29:57 | 显示全部楼层
好吧,都没人理我,真让我伤心。不过我已经解决了,还是按照这样写
osg::ref_ptr<osg::Image> image = new osg::Image;
image->allocateImage(WIDTH,HEIGHT,1,GL_LUMINANCE,GL_FLOAT);
image->setInternalTextureFormat(GL_LUMINANCE32F_ARB);
不过,我是重装了显卡驱动之后,突然发现可以读出float数据了,写出了供大家参考吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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