如果还记得来自于何方,看看一个月前如何引入TerrainCuller的。

如何判断是否该cull呢?在这里先打个断点



用的包围球


可见,通过VIEW_FRUSTUM_CULLING,SMALL_FEATURE_CULLING,SHADOW_OCCLUSION_CULLING三种方式剔除

可见,目前用的是视锥体剔除
现在进入正文,开始剔除


先看水平方向









可见,判断是否可见是与切面相关联的。该切面切椭球体。如果目标在视线上面,则可视;如果视点在切面以下,且目标比视点还靠下,则目标 被遮挡;
如果视线在切面上面,且目标在切面前面,则目标可视。
下一步就考虑,这些切面如何来的?很明显,是_points[]数组。这些points[]数组来于哪里呢?原来来自于包围盒的顶部四个顶点。

这个包围盒又从哪里来呢?设个断点在这里,
重新开始
上一层


那么,这个_drawable是从哪里来的呢


可见,又回溯到surfaceDrawable,

这个geom是什么呢

可见,是以前调试过的geometrytool中的图元.
总上所述,水平方向遮挡是Horizon->HorizonTileCuller(_points)->box->SurfaceNode->(_drawable)->TileDrawable->GeometryPool->EngineContext->TileNode
就这样吧
本文深入探讨了地形渲染中的剔除策略,主要涉及视锥体剔除、小特征剔除和阴影遮挡剔除。通过包围球和切面关联,分析了水平方向上的遮挡判断,揭示了从几何体到包围盒,再到表面节点和图块绘制的流程。重点在于 HorizonTileCuller 如何利用 _points 数组和包围盒顶点来决定剔除条件,以及这些信息如何回溯到 GeometryPool 和 EngineContext 中。整个过程揭示了图形渲染中剔除算法的关键步骤。
1291

被折叠的 条评论
为什么被折叠?



