osg关闭模型自带光照
时间: 2023-08-03 18:39:50 浏览: 271
在osg中关闭模型自带光照可以通过以下步骤实现:
1. 创建一个osg::Material对象,并设置其光照属性为osg::Material::NO_LIGHTING,表示不使用任何光照。
```cpp
osg::ref_ptr<osg::Material> material = new osg::Material;
material->setLighting(osg::Material::NO_LIGHTING);
```
2. 将该材质应用到模型的所有Drawable中,这样模型的所有Drawable都将使用该材质。
```cpp
osg::ref_ptr<osg::Node> model = ...; // 加载模型
osgUtil::Optimizer optimizer;
optimizer.optimize(model.get(), osgUtil::Optimizer::FLATTEN_STATIC_TRANSFORMS);
osg::StateSet* stateSet = model->getOrCreateStateSet();
stateSet->setAttributeAndModes(material.get(), osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE);
```
这样,模型就不会使用自带的光照了。
相关问题
osg模型禁止使用自带光源
这是一个比较具体的问题,我猜测你是在使用 OpenSceneGraph(OSG)进行三维模型渲染。在 OSG 中,通常会使用外部的灯光来照亮模型,而不是使用模型自带的光源。这是因为 OSG 中的光照计算是基于灯光对象的,而不是基于模型本身的。
如果你想禁止使用模型自带的光源,可以在加载模型的时候设置其材质属性,将其自发光属性设置为0即可。具体的代码实现可能会因为你的场景配置而有所不同,你可以参考 OSG 的官方文档或者其他资料来实现这一功能。
阅读全文