osg.OccluderNode
实现了一个简单的 视锥剪切器。
osg.OccluderNode
可以用于优化场景图渲染性能。它继承自 osg.Group
,并添加了一个简单的视锥剪裁操作。当一个 OccluderNode
在场景图中添加之后,它会自动地检测它所包含的所有子节点,并剔除在观察视锥体外的节点,从而减少渲染次数,提高渲染速度。
OccluderNode
可以被自动从场景图中创建,也可以手动创建。
可以使用以下代码自动添加OccluderNode:
root_node = osgDB.readNodeFile("my_scene.osg")
root_node.autocreateOccluders(True) # 自动创建OccluderNode
viewer.setSceneData(root_node)
可以通过以下代码方式手动创建 OccluderNode:
occluder_node = osg.OccluderNode() # 创建 OccluderNode
occluder_node.addChild(child1) # 添加子节点
occluder_node.addChild(child2)
root_node = osg.Group() # 创建根节点
root_node.addChild(occluder_node) # 添加 OccluderNode
viewer.setSceneData(root_node)
osg.OccluderNode
内置了一些常用方法来操作视锥体和节点剪裁。这里仅列出几个常用的方法和属性。更多详细的方法和属性请参考 OccluderNode
的源码文档。
创建视锥体。
参数:
vertices
:视锥体顶点坐标集合。
triangle
:视锥体三角形面集合。
注: 该方法通常不需要显式调用,因为 OccluderNode
会在 addChild() 方法中自动调用。
计算节点是否在视锥内。
参数:
visitor
:osg.NodeVisitor 对象。返回值:
osg.NodeVisitor.Result.ValidNode
:节点在视锥内。
osg.NodeVisitor.Result.CullNode
:节点在视锥外。
重写 accept() 方法。
参数:
visitor
:osg.NodeVisitor 对象。返回值:
osg.NodeVisitor.Result.ValidNode
:节点在视锥内。
osg.NodeVisitor.Result.CullNode
:节点在视锥外。
视锥体。
OccluderNode 相关的节点。
从边界框创建 OccluderNode。
参数:
bounds
:边界框。注: 该方法通常不需要显式调用,因为 OccluderNode
会在 addChild() 方法中自动调用。