查看: 926|回复: 2

整数integer 纹理送入到glsl中

[复制链接]

该用户从未签到

发表于 2014-6-21 20:37:20 | 显示全部楼层 |阅读模式
之前发了个贴,说是render to texture的时候,读不出来float数,现在的想把整数纹理送进glsl的fragment shading代码段,却送不进去
读送入的纹理数据代码如下:
ivec3 color=texture2D(texture1,0);
读到的结果竟然是 0.
纹理送入部分的代码如下,只用了一个纹理进行测试
unsigned int imgdata[1];
imgdata[0]=2;
img->setImage(1,1,1,GL_INTENSITY32UI_EXT,GL_INTENSITY,GL_UNSIGNED_INT,(unsigned char*)imgdata,osg::Image::USE_NEW_DELETE);
osg::Texture2D *tex2d=new osg::Texture2D;
tex2d->setFilter(osg::Texture2D::MAG_FILTER,osg::Texture2D::NEAREST);
tex2d->setFilter(osg::Texture2D::MIN_FILTER,osg::Texture2D::NEAREST);
tex2d->setWrap(osg::Texture2D::WRAP_R,osg::Texture2D::REPEAT);
tex2d->setWrap(osg::Texture2D::WRAP_S,osg::Texture2D::REPEAT);
tex2d->setWrap(osg::Texture2D::WRAP_T,osg::Texture2D::REPEAT);
tex2d->setImage(img);
试了下面的表达式,进行替换也不行,结果仍为0
img->setImage(1,1,1,GL_LUMINANCE,GL_LUMINANCE,GL_UNSIGNED_INT,(unsigned char*)imgdata,osg::Image::USE_NEW_DELETE);
img->setImage(1,1,1,GL_RED,GL_RED,GL_UNSIGNED_INT,(unsigned char*)imgdata,osg::Image::USE_NEW_DELETE);
但是发现,浮点数据却可以送进去呀,浮点纹理的代码如下。
osg::Image* img = new osg::Image();
float imgdata[1];
imgdata[0]=2;
img->setImage(1,1,1,GL_LUMINANCE32F_ARB,GL_LUMINANCE,GL_FLOAT,(unsigned char*)imgdata,osg::Image::USE_NEW_DELETE);
这是为什么呀,我这一周都被这送进送出的问题烦死了,谢谢大神指点。

该用户从未签到

发表于 2014-6-25 17:55:38 | 显示全部楼层
setInternalTextureFormat要给定一个与之对应的值

该用户从未签到

 楼主| 发表于 2014-6-25 20:16:48 | 显示全部楼层
谢谢array
实际上,下面这句话已经涵盖了setInternalTextureFormat所要表达的意思,即第四个参数。
img->setImage(1,1,1,GL_INTENSITY32UI_EXT,GL_INTENSITY,GL_UNSIGNED_INT,(unsigned char*)imgdata,osg::Image::USE_NEW_DELETE);
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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