查看: 3268|回复: 6

问题!!!帮忙

[复制链接]

该用户从未签到

发表于 2008-3-9 12:06:00 | 显示全部楼层 |阅读模式
我在3ds Max中建了一个树叶的模型,是在一个平面应用透明贴图:
在3ds Max中渲染正确,但把它转换为3ds文件后,在osg中装入模型
这时渲染就不对了,这个问题如何解决呀!!!
                                                谢谢!!!!

漫反射贴图

漫反射贴图

不透明贴图

不透明贴图

OSG渲染结果

OSG渲染结果

该用户从未签到

发表于 2008-3-9 13:47:21 | 显示全部楼层
原帖由 thb8177 于 2008-3-9 12:06 发表
我在3ds Max中建了一个树叶的模型,是在一个平面应用透明贴图:
在3ds Max中渲染正确,但把它转换为3ds文件后,在osg中装入模型
这时渲染就不对了,这个问题如何解决呀!!!
                                   ...


要实现背景透明的话,需要对节点设置相应的渲染属性,通常为osg::AlphaFunc。例如:
osg::AlphaFunc* alphaFunc = new osg::AlphaFunc;
alphaFunc->setFunction(osg::AlphaFunc::GEQUAL,0.05f);
node->getOrCreateStateset()->setAttributeAndModes( alphaFunc, osg::StateAttribute::ON );
也就是设置Alpha透明度大于0.05的方能通过Alpha检验。
此外,您需要使用Photoshop等软件设置图片的背景为透明色(即,背景的Alpha值均为0)。建议保存为PNG格式以保留透明度信息。
3dsmax的渲染正确与否与OSG的渲染是不同的概念。前者通过软件计算并渲染的方式,牺牲时间而换取真实的效果;后者则是实时渲染软件,不能花费太多时间在软件计算上,因此需要通过显示设备的硬件来完成各种效果的显示。

渲染结果

渲染结果

该用户从未签到

 楼主| 发表于 2008-3-9 15:25:21 | 显示全部楼层
太好了,array不仅告诉我如何做,而且还告诉我两者的区别。非常感谢!!!

该用户从未签到

 楼主| 发表于 2008-3-9 20:50:31 | 显示全部楼层
array可不可以把你写的代码贴出来呀?我是一个新手,想学一学。非常感谢了!!!

该用户从未签到

发表于 2008-3-9 22:07:24 | 显示全部楼层
原帖由 thb8177 于 2008-3-9 20:50 发表
array可不可以把你写的代码贴出来呀?我是一个新手,想学一学。非常感谢了!!!


呵呵,这个没什么特别的代码吧,您的程序中应该已经实现了树叶图形节点及纹理的读入(我从截图中看到的),那么下面的工作就是设置AlphaFunc参数了,比如:
  1. osg::Image* myimage = osgDB::readImageFile( "tree.png" );
  2. osg::Texture2D* mytex = new osg::Texture2D;
  3. mytex->setImage( 0, myimage );

  4. osg::AlphaFunc* alphaFunc = new osg::AlphaFunc;
  5. alphaFunc->setFunction(osg::AlphaFunc::GEQUAL, 0.05f);

  6. osg::StateSet* mystate = geode->getOrCreateStateSet();
  7. mystate->setTextureAttributeAndModes( 0, mytex, osg::StateAttribute::ON );
  8. mystate->setAttributeAndModes( alphaFunc, osg::StateAttribute::ON  );
复制代码
这里geode就是您的树叶节点了,代码所做的就是创建新的AlphaFunc渲染属性,设置Alpha检验函数,添加到StateSet~~

该用户从未签到

 楼主| 发表于 2008-3-10 10:59:37 | 显示全部楼层
好的收到,万分感谢!!!

该用户从未签到

 楼主| 发表于 2008-3-10 11:11:18 | 显示全部楼层
好的收到,万分感谢!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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