查看: 1952|回复: 12

怎样去掉颜色信息

[复制链接]

该用户从未签到

发表于 2009-12-24 13:39:13 | 显示全部楼层 |阅读模式
怎样使用遍历去掉模型中的的颜色信息。谢谢!

该用户从未签到

发表于 2009-12-24 13:53:06 | 显示全部楼层
写一个VISITOR类,派生自osg::NodeVisitor,然后遍历所有NODE的STATESET,找到里面的MATERIAL属性,MATERIAL属性里包括了颜色信息,你可以删除这个MATERIAL或者修改颜色,可以参考下OpenSceneGraph-2.8.2\OpenSceneGraph-2.8.2\applications\osgconv\下的osgconv.cpp里的CompressTexturesVisitor类来做遍历

该用户从未签到

发表于 2009-12-24 15:05:33 | 显示全部楼层
你建模时候去掉不是更好

该用户从未签到

 楼主| 发表于 2009-12-24 15:56:50 | 显示全部楼层
感谢hjcun2009,您说的应该是材质的颜色。
我没有说清,我想去掉的是顶点的颜色。
我的模型是osgExp导出的。

该用户从未签到

发表于 2009-12-24 16:12:49 | 显示全部楼层
你可以遍历所有的NODE,找到是GEODE的NODE,然后遍历GEODE下的所有的drawable,如果用OSGEXP导出的模型,应该一般是osg::Geometry类型的吧(我目前导出的模型里面都是osg::Geometry的),可以调用osg::Geometry下的设置颜色的函数去掉颜色信息。

该用户从未签到

 楼主| 发表于 2009-12-24 17:41:18 | 显示全部楼层
我没有找到osg::Geometry中去掉颜色的函数,请hjcun2009 贴一段代码,可以吗?
谢谢!

该用户从未签到

发表于 2009-12-24 19:20:11 | 显示全部楼层
osg::Geometry里有个setColorArray函数可以设置颜色

该用户从未签到

发表于 2009-12-25 08:45:42 | 显示全部楼层
setColorArray(NULL)

该用户从未签到

 楼主| 发表于 2009-12-25 09:02:54 | 显示全部楼层
to array,调用Clear()函数,效果也一样吧。

该用户从未签到

发表于 2009-12-25 09:35:07 | 显示全部楼层
也可以用clear()清除颜色数组的数据。不过其实直接设置setColorBinding(BIND_OFF)是最好的,这样还可以在需要的时候恢复颜色设置

该用户从未签到

发表于 2009-12-25 10:39:49 | 显示全部楼层
小技巧啊,嘿嘿~~setColorBinding(BIND_OFF)是最好的,这样还可以在需要的时候恢复

该用户从未签到

发表于 2012-8-2 00:24:04 | 显示全部楼层
本帖最后由 int_178 于 2012-8-2 00:24 编辑
array 发表于 2009-12-25 09:35
也可以用clear()清除颜色数组的数据。不过其实直接设置setColorBinding(BIND_OFF)是最好的,这样还可以在需 ...
  1. /**********************************************************
  2. *Write by FlySky
  3. *zzuxp@163.com  http://www.OsgChina.org   
  4. **********************************************************/

  5. //.......................之前内容和本书源码的基本几何体绘制(Geometry)示例例子完全一样

  6.         //创建颜色数组
  7.         osg::Vec4Array* vc = new osg::Vec4Array();
  8.         //添加数据
  9.         vc->push_back(osg::Vec4(1.0f,0.0f,0.0f,1.0f));
  10.         vc->push_back(osg::Vec4(0.0f,1.0f,0.0f,1.0f));
  11.         vc->push_back(osg::Vec4(0.0f,0.0f,1.0f,1.0f));
  12.         vc->push_back(osg::Vec4(1.0f,1.0f,0.0f,1.0f));

  13.         //设置颜色数组
  14.         geom->setColorArray(vc);
  15.         //设置颜色的绑定方式为不绑定
  16.         geom->setColorBinding(osg::Geometry::BIND_OFF);

  17. //.......................之后也完全一样
  18. }


  19. }
复制代码
但是颜色依然存在?为什么?

该用户从未签到

发表于 2012-8-2 07:57:19 | 显示全部楼层
还是设置一个默认的颜色吧,opengl状态机 你懂的,之前的颜色会一直保存到更改为止
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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