解决osg中不能更改模型颜色问题

前些天弄osg时更改不了模型颜色。这一次我把模型的单个object分出来做一个独立的文件,然后再由osg的osgDB读入并显示。此时发现可以更改模型的颜色。

仔细观察,发现在新的独立文件中,object并没有对默认的StateSet进行更改。由此看来确实是StateSet的值使object的颜色不能显示。

原先的osg文件中,StateSet部分的定义为:

StateSet {
UniqueID StateSet_0
rendering_hint DEFAULT_BIN
renderBinMode INHERIT
Material {
name "SketchUp_Default"
ColorMode OFF
ambientColor 0.117647 0.117647 0.117647 1
diffuseColor 0.784314 0.784314 0.784314 1
specularColor 0 0 0 0.33
emissionColor 0 0 0 1
shininess 25.6
}


问题出在Material中的ColorMode值上。ColorMode的意义为它指定了质材的颜色跟踪属性。它可能的值有:

AMBIENT :环境光颜色

DIFFUSE :漫射光颜色

SPECULAR :镜面光颜色

EMISSION :发射光颜色

AMBIENT_AND_DIFFUSE :环境与漫射光颜色

OFF :关闭模式

当ColorMode的值是OFF时,材质的颜色跟踪属性被禁止,即材质的属性值不会随颜色的改变而变化。于是设置object的颜色将看不到任何的效果。

解决方法:将ColorMode的值改为DIFFUSE即可

在程序中的代码:

osg::ref_ptr<osg::Vec4Array> v = new osg::Vec4Array();
v->push_back(osg::Vec4(1,0,0,1));
geom->setColorArray(v.get());

osg::StateSet* ss = geom->getOrCreateStateSet();
osg::Material* mat = new osg::Material();
mat->setColorMode(osg::Material::ColorMode::DIFFUSE);

ss->setAttribute(mat);

转自:http://blog.csdn.net/augusdi/article/details/8863101

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值