查看: 1248|回复: 5

Cg的怎么样读取.DDS文件呢

[复制链接]

该用户从未签到

发表于 2011-11-6 20:55:59 | 显示全部楼层 |阅读模式
有没有哪位大哥知道怎么用cg读取.DDS文件里面各个通道里面的数据呢,.DDS是可以存储浮点型的数据的,这么怎样才能用Cg获取里面的数据呢?

该用户从未签到

发表于 2011-11-7 10:04:12 | 显示全部楼层
设置纹理的时候可以将内部格式设置为float类型

该用户从未签到

 楼主| 发表于 2011-11-8 10:08:59 | 显示全部楼层
2L,请问您能告诉我事怎么样设置的吗

该用户从未签到

发表于 2011-11-10 10:31:03 | 显示全部楼层
OGL的话在glTexImage2D的时候设置Datatype为GL_FLOAT就可以了,这样OGL会尝试从void*像素数据中读取float数,当然也需要您提供的像素数据是正确的

该用户从未签到

 楼主| 发表于 2011-11-19 11:50:34 | 显示全部楼层
本帖最后由 lddldd 于 2011-11-19 11:51 编辑
array 发表于 2011-11-10 10:31
OGL的话在glTexImage2D的时候设置Datatype为GL_FLOAT就可以了,这样OGL会尝试从void*像素数据中读取float数 ...


先感谢您的帮助,我用您说的方法试了,可以读取0~1之间的浮点型数据了,但是如果.dds中存储的数据超过1应该怎么办呢?我觉得是我哪个参数设置有问题,请问您之前的做法都是怎样的呢,我的代码如下:
       osg::Texture2D* tex2d_uv = new osg::Texture2D();
        tex2d_uv->setDataVariance(osg::Object:YNAMIC);
        tex2d_uv->setFilter(osg::Texture2D::MIN_FILTER, osg::Texture2D:INEAR);
        tex2d_uv->setFilter(osg::Texture2D::MAG_FILTER, osg::Texture2D::LINEAR);
        tex2d_uv->setResizeNonPowerOfTwoHint(false);
        tex2d_uv->setInternalFormat(GL_RGBA);
        tex2d_uv->setSourceFormat(GL_RGBA);
        tex2d_uv->setSourceType(GL_FLOAT);
        osg::Image* image1 = osgDB::readImageFile("xiaoluoli.dds");
        image1->setInternalTextureFormat(GL_RGBA);
        image1->setPixelFormat(GL_RGBA);
        image1->setDataType(GL_FLOAT);
        tex2d_uv->setImage(image1);

该用户从未签到

发表于 2011-11-23 10:43:19 | 显示全部楼层
超过1也无所谓,只是您自己要在shader里用这些数据做什么的问题。对于绘制本身而言,超过1的数据不会有什么变化
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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