osg.BoundingBoxImpl 类定义了一个简单的包围盒,即一个具有最大和最小顶点的边界框。该类还定义了一些操作来计算和更新包围盒。
创建一个 osg.BoundingBoxImpl 的实例非常简单:
import osg
bb = osg.BoundingBoxImpl()
然后,您可以使用 set
方法分别设置最小和最大顶点:
bb.set(osg.Vec3(0, 0, 0), osg.Vec3(1, 1, 1))
您也可以直接设置最小和最大顶点:
bb._min = osg.Vec3(0, 0, 0)
bb._max = osg.Vec3(1, 1, 1)
要计算一组点的边界框,可以使用 expandBy
方法。例如,以下代码将包围盒扩展到 (0, 0, 0) 和 (1, 1, 1):
bb = osg.BoundingBoxImpl()
bb.expandBy(osg.Vec3(0, 0, 0))
bb.expandBy(osg.Vec3(1, 1, 1))
您也可以将两个边界框合并成一个:
bb1 = osg.BoundingBoxImpl()
bb1.expandBy(osg.Vec3(0, 0, 0))
bb1.expandBy(osg.Vec3(1, 1, 1))
bb2 = osg.BoundingBoxImpl()
bb2.expandBy(osg.Vec3(2, 2, 2))
bb2.expandBy(osg.Vec3(3, 3, 3))
bb1.expandBy(bb2)
以下是一些其他方法:
isvalid
返回当前包围盒是否有效,即 min > max
。
center
返回包围盒的中心点。
radius
返回包围盒的半径。
contains
检查点是否包含在包围盒内。
intersects
检查包围盒是否与其他包围盒相交。
transform
将包围盒变换为给定矩阵的容器。
volume
返回包围盒的体积。
cull
检查包围盒是否可以被视锥体剔除。