查看: 1341|回复: 5

一个面上贴俩个bmp透明图片问题

[复制链接]

该用户从未签到

发表于 2011-3-30 15:02:49 | 显示全部楼层 |阅读模式
贴一个 bmp的图片 好好的。贴2个就什么都不见了,代码如下
///创建 geode
osg::Geode* geode = new osg::Geode;
osg::Geometry* geom = new osg::Geometry;
geode->addDrawable(geom);
osg::Vec3Array* coords = new osg::Vec3Array(4);
(*coords)[0] = corner;
(*coords)[1] = corner+width;
(*coords)[2] = corner+width+height;
(*coords)[3] = corner+height;
geom->setVertexArray(coords);

osg::Vec3Array* norms = new osg::Vec3Array(1);
(*norms)[0] = width^height;
(*norms)[0].normalize();
geom->setNormalArray(norms);
geom->setNormalBinding(osg::Geometry::BIND_OVERALL);
osg::Vec2Array* tcoords = new osg::Vec2Array(4);
(*tcoords)[0].set(0.0f,0.0f);
(*tcoords)[1].set(1.0f,0.0f);
(*tcoords)[2].set(1.0f,1.0f);
(*tcoords)[3].set(0.0f,1.0f);
geom->setTexCoordArray(0,tcoords);      //
geom->setTexCoordArray(1,tcoords);
geom->addPrimitiveSet(new osg:rawArrays(osg:rimitiveSet:UADS,0,4));

osg::Texture2D* Texture1= new osg::Texture2D;
osg::Texture2D* Texture2= new osg::Texture2D;

Texture1->setImage(osgDB::readImageFile("Halo3.bmp"));
Texture2->setImage(osgDB::readImageFile("Streaks4.bmp"));

osg::StateSet* stateOne = new osg::StateSet();
stateOne->setTextureAttributeAndModes(0,Texture1,osg::StateAttribute::ON);
//stateOne->setTextureAttributeAndModes(1,Texture2,osg::StateAttribute::ON); 用这行 就什么都没有
stateOne->setAttributeAndModes(new osg::BlendFunc(osg::BlendFunc::ONE ,osg::BlendFunc::SRC_ALPHA));
stateOne->setMode(GL_BLEND,osg::StateAttribute::ON);
  stateOne->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
geode->setStateSet(stateOne);

该用户从未签到

 楼主| 发表于 2011-3-30 15:06:03 | 显示全部楼层
我换了这两个图片 clockface.JPG 和 skymap.jpg,倒是显示了。

该用户从未签到

发表于 2011-3-30 19:25:49 | 显示全部楼层
那你检查下图片是不有问题

该用户从未签到

发表于 2011-3-31 08:59:44 | 显示全部楼层
不是纹理本身的问题,考虑将下面几句中的参数换一换:
stateOne->setAttributeAndModes(new osg::BlendFunc(osg::BlendFunc::ONE ,osg::BlendFunc::SRC_ALPHA));
stateOne->setMode(GL_BLEND,osg::StateAttribute::ON);
  stateOne->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);

该用户从未签到

发表于 2011-3-31 16:23:19 | 显示全部楼层
用到两个纹理通道的话,请设置第二个通道的TexEnv

该用户从未签到

 楼主| 发表于 2011-4-1 10:10:19 | 显示全部楼层
本帖最后由 wangxiao358 于 2011-4-1 10:12 编辑

OK了。。。。多谢 array..
确实 是要设置 第二个通道的TexEnv..

另外 stateOne->setAttributeAndModes(new osg::BlendFunc(osg::BlendFunc::ONE ,osg::BlendFunc::SRC_ALPHA));
混合 参数 也要改。呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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