OpenSceneGraph Android 开发学习-正确加载模型及颜色

二、正确加载模型及颜色

1.  模型导入

Osg中的osgDB库提供了很多不同种格式的模型导入插件,比如常见的.bmp .obj .ply等。更加完整的支持可以参照

http://osg3.readthedocs.org/en/latest/ch10.html

里面详细介绍了Osg所支持的文件格式及相对应的库。

 

在使用相应插件前,需要在代码开头,比如头文件中加入相应的插件引入宏。

USE_OSGPLUGIN(stl)

上述就是对stl格式文件读取插件的引入。

然后在代码中,就可以相对应的读取该格式数据。

osg::ref_ptr<osg::Node> loadedModel =osgDB::readNodeFile(filePath);

filePath指定了对应的文件路径,比如/mnt/sdcard/test.stl

 

2.  模型颜色

导入带颜色的模型时,在启用光照的情况下,会出现颜色不正确的情况,整个模型都是灰白色。而将光照关闭后,颜色完全正确。(注意:我们暂时只讨论一个Geometry一种颜色的模型,也就是BIND_OVERALL的情况)

这个结果可能是由glColorMaterial的实现导致的。核对过导入的数据,Geometry中的color array是有值的,唯一的解释只能是color array没有起到material的效果,或者说glColorMaterial没有作用。

为了解决该问题,暂时选取了一个较为取巧的办法,避过glColorMaterial。具体方案是,便利所有的Geometry节点,对节点开启Material,但是选用 osg::Material::SPECULAR,这样material的specular参数会失去效果,而我们将Diffuse和Ambient设为正确的颜色即可。(有兴趣可以查看Material.cpp的源码,在SPECULAR模式下,Diffuse和Ambient的设定是由glMaterialfv来实现的)。源码如下:

 

#include <osg/GL>

#include <osg/GLExtensions>

#include <osg/S

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值