当你设置节点的渲染状态时,这个状态将被赋予当前的节点及其子节点。如 果子节点对同一个渲染状态设置了不同的属性参数,那么新的子节点状态参数将会覆盖原有的。换句话说,缺省情况下子节点可以改变自身的某个状态参数,或者继承父节点的同一个状态。
这种继承的特性在许多情况下都非常实用。但是有时候渲染可能需要更多特性。假设场景图形中有一个包含了实体多边形几何体的节点。如果要以线框模式来渲染场景图形,你的程序就需要覆盖这种多边形渲染模式状态,不论它出现在什么位置。
OSG 允许用户根据场景图形中任意位置的渲染属性和模式需求,而单独改变原有的状态继承特性。用户可以选择以下这几种枚举形式:
- osg::StateAttribute:: OVERRIDE - 如果你将一个渲染属性和模式设置为OVERRIDE,那么所有的子节点都将继承这一属性或模式,子节点对它们更改将会无效。
- osg::StateAttribute:: PROTECTED - 这种形式可以视为 OVERRIDE 的一个例外。凡是设置为PROTECTED的渲染属性或模式,均不会受到父节点的影响。
- osg::StateAttribute::INHERIT - 这种模式强制子节点继承父节点的渲染状态。其效果是子节点的渲染状态被解除,而使用父节点的状态替代。