1、前言
在 OSG 中存在两棵树,即场景树和渲染树。渲染树是一棵以 StateSet 和 RenderLeaf
为节点的树,它可以做到 StateSet 相同的 RenderLeaf 同时渲染而不用切换 OpenGL状态,并且做到尽量少但在多个不同 State 间切换。渲染树在 CullVisitor 的 cull 过程中逐渐创建。后面所讲到的纹理、光照及材质,都是关于渲染状态的控制。
2、渲染状态
OSG 支持绝大部分的 OpenGL 固定功能管道(fixed function pipeline)渲染,如 Alpha 检验、Blending融合、剪切平面、颜色蒙板、面拣选(face culling)、深度和模板检验、雾效、点和线的光栅化(rasterization)等。OSG 的渲染状态也允许应用程序指定顶点着色(vertex shader)和片段着色(fragment shader)。
2.1 osg::StateSet 类
osg::StateSet 类派生自 osg::Referenced,以实现更好的数据共享。也就是说,共享同一个 osg::StateSet的 osg::Node 或 osg::Drawable 类不需要额外的代码来清理其内存空间。
用户的应用程序需要