〇 渲染状态 Rendering State
OSG 渲染状态
需要在osg::StateSet中设置渲染状态
osg::StateSet可以关联到一个节点Node or Drawable类
用户需要尽量使关联到场景图形的StateSet最少化、StateSet越少,内存占用越小,OSG在一次场景图形遍历中所消耗的工作量也越少。
//1
osg::StateSet *state = obj->getOrCreateStateSet();
//2
osg::ref_ptr<osg::StateSet> ptrState = obj->getOrCreateStateSet();
一 渲染属性(Attribute) 和渲染模式(Mode)
OSG为每个状态属性定义了不同的类,所有属性类均继承自osg::StateAttribute
1. setAttribute 设置属性 – 演示剔除面
//1. 获得stateSet
osg::StateSet *state = geom->getOrCreateStateSet();
//2. 创建CullFace属性
osg::CullFace* cf = new osg::CullFace(osg::CullFace::BACK);
state->setAttribute(cf);
CullFace 对应openGL 的GL_CULL_FACE
2. setMode 设置渲染模式 - 演示雾化模式
osg::StateSet::setMode()允许或禁止某种模式
osg::StateSet* state = geom->getOrCreateStateSet();
state->setMode(GL_FOG,osg::StateAtrribute::ON);
setMode(第一个参数= OpenGL参数)
glEnable glDisable 函数
对比
类型 | 说明 | |
---|---|---|
StateSet | 状态 | Geometry::getOrCreateStateSet() |
属性 | Attribute | StateSet::SetAttribute(StateAttribute*) |
模式 | Mode | StateSet::SetMode(GL_XXX,StateAttribute::ON/OFF) |
3. StateSet::setAttributeAndModes()
二 状态继承
子节点可以覆盖父节点的状态
OVERRIDE | 所有子节点都要继承 |
PROTECTED | 保护子节点不受父节点影响 |
INHERIT | 强制子节点继承父节点 |
osg::StateSet* state = root->getOrCreateStateSet();
state->setAttributeAndModes(pm,osg::StateAttribute::ON|osg::StateAttribute::OVERRIDE);