2.建立场景图形--4 渲染状态

〇 渲染状态 Rendering State

OSG 渲染状态
需要在osg::StateSet中设置渲染状态
osg::StateSet可以关联到一个节点Node or Drawable类

用户需要尽量使关联到场景图形的StateSet最少化、StateSet越少,内存占用越小,OSG在一次场景图形遍历中所消耗的工作量也越少。

Reference
StateSet ref_ptr<>
属性和模式
纹理
非纹理
//1
osg::StateSet *state = obj->getOrCreateStateSet();

//2 
osg::ref_ptr<osg::StateSet> ptrState = obj->getOrCreateStateSet();

一 渲染属性(Attribute) 和渲染模式(Mode)

OSG为每个状态属性定义了不同的类,所有属性类均继承自osg::StateAttribute

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);
State
类图
派生
setAttribute
setAttribute
StateAttribule
StateSet
CullFace

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()
属性AttributeStateSet::SetAttribute(StateAttribute*)
模式ModeStateSet::SetMode(GL_XXX,StateAttribute::ON/OFF)
Geometry_Node
getOrCreateStateSet
StateSet
setMode
OFF
ON
setAttribute
GL_XXX

3. StateSet::setAttributeAndModes()

二 状态继承

子节点可以覆盖父节点的状态

OVERRIDE所有子节点都要继承
PROTECTED保护子节点不受父节点影响
INHERIT强制子节点继承父节点
osg::StateSet* state = root->getOrCreateStateSet();
state->setAttributeAndModes(pm,osg::StateAttribute::ON|osg::StateAttribute::OVERRIDE);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值