本例子演示了impostor代替节点的应用。
以下是转自网上翻译源码的内容:
Impostor是一种LOD组节点,它既允许通过子结点到视点的距离来选择相应的子结点,又可以通
过到视点的距离来选择图片缓存。Impostor的原理是:通过缓存几何体(realgeometry)的图像
,然后在之后的帧内使用该图像代替该几何体。这有点像Billboard,但是, 它是实时更新并与
视点的位置相关的。通过映射了该纹理的四边形,可以降低场景的复杂度以提高性能。OSG中的
impostor并不是完全按照上述网址中的技术来实现的,但是这应该是个不错的开始。OSG的
Impostor结点远没有那么复杂,因为使用时你并不需要重构(重新组织)你的整个场景。你所要
做的就是为Impostor结点的每一个子结点设置相应的LOD可见范围值(visiblerange value),
并且设置一个Impostor阈值,来告诉渲染器(renderer)在什么距离以外应该使用Impostor的图
像缓存。osg::CullVisitor会自动处理所有的渲染前期(pre-renderingstages)的设置,计算
出所需的ImpostorSprites(这个类封装了图像缓存与四边形),并随视点的变化更新它们。如
果你使用osg::SceneView/CullVisitor,所有为了支持Impostor的复杂过程都会被很好的隐藏。
关于Impostor还有很多改进计划:
1) 估计一个ImpostorSprite在多少帧内会被重用,如果被重用的次数不会多于一个最小阈值的
以下是转自网上翻译源码的内容:
Impostor是一种LOD组节点,它既允许通过子结点到视点的距离来选择相应的子结点,又可以通
过到视点的距离来选择图片缓存。Impostor的原理是:通过缓存几何体(realgeometry)的图像
,然后在之后的帧内使用该图像代替该几何体。这有点像Billboard,但是, 它是实时更新并与
视点的位置相关的。通过映射了该纹理的四边形,可以降低场景的复杂度以提高性能。OSG中的
impostor并不是完全按照上述网址中的技术来实现的,但是这应该是个不错的开始。OSG的
Impostor结点远没有那么复杂,因为使用时你并不需要重构(重新组织)你的整个场景。你所要
做的就是为Impostor结点的每一个子结点设置相应的LOD可见范围值(visiblerange value),
并且设置一个Impostor阈值,来告诉渲染器(renderer)在什么距离以外应该使用Impostor的图
像缓存。osg::CullVisitor会自动处理所有的渲染前期(pre-renderingstages)的设置,计算
出所需的ImpostorSprites(这个类封装了图像缓存与四边形),并随视点的变化更新它们。如
果你使用osg::SceneView/CullVisitor,所有为了支持Impostor的复杂过程都会被很好的隐藏。
关于Impostor还有很多改进计划:
1) 估计一个ImpostorSprite在多少帧内会被重用,如果被重用的次数不会多于一个最小阈值的