查看: 3024|回复: 6

求助:正确读浮点纹理的数据到主内存

[复制链接]

该用户从未签到

发表于 2008-9-21 23:15:37 | 显示全部楼层 |阅读模式
一张浮点纹理作为渲染目标被渲染后,我想把里面的值读回到主内存.
我用了camera->attach(osg::Camera::COLOR_BUFFER, image);的方法,
但float* data=(float*)image->data(c, r);得到的值都被截断在[0,1]之间了.
而glGetTexImage();是可以得到正确的值的.
请问用osg应该怎么弄?
谢谢!

附件里是源代码

lyjPreRender.rar

28.94 KB, 下载次数: 100, 下载积分: 威望 1

该用户从未签到

发表于 2008-9-21 23:20:14 | 显示全部楼层
我估计你的image都没有值~~~~你跟踪一下试试~~~

该用户从未签到

 楼主| 发表于 2008-9-21 23:23:13 | 显示全部楼层
只要在[0,1]之间的值都能正确得到的,在[0,1]之外的都被截断了.

该用户从未签到

发表于 2008-9-21 23:33:40 | 显示全部楼层
int类型,,0-255之间试试~~~只是再除一下就可以了~~~~~

该用户从未签到

发表于 2008-9-22 00:08:46 | 显示全部楼层
请参看osgprerender例子,其中MyCameraPostDrawCallback的实现代码中有关于浮点纹理的操作:

看看是否作了必要的设置,比如:
osg::Image* image = new osg::Image;
image->allocateImage(width, height, 1, GL_RGBA, GL_FLOAT);
camera->attach(osg::Camera::COLOR_BUFFER, image);

该用户从未签到

发表于 2008-9-22 00:12:05 | 显示全部楼层
我看了下,您的代码好像和osgprerender差不多
Image类是不能够获取截断范围(clamped)之外的纹理坐标数据的。这一点我记得osg-users中曾经讨论过。如果一定要设法获取那些数据的话,您的方法就可以,也可以使用GLSL

[ 本帖最后由 array 于 2008-9-22 08:13 编辑 ]

该用户从未签到

 楼主| 发表于 2008-9-22 09:38:16 | 显示全部楼层
谢谢楼上两位的帮忙.问题已经解决.
我的测试代码是在osgprerender的基础上改的.
在王锐的提醒下,我在[osg-users] Trying to save a render to texture image,找到了正确的方法:
在我的代码中再加上一句就行了camera->attach(osg::Camera::COLOR_BUFFER, texture);
即这句代码和camera->attach(osg::Camera::COLOR_BUFFER, image);必须同时出现才能够得到完整的浮点值.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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