八叉树确实可以帮助您专注于将立方体世界块分成相等的部分。他们玩的技巧是,当您不断将立方体输入八叉树分支时,您会自动将这些细分为您以后可以在接近的基础上提取的部分(即 Chunk01(128,0,0) Chunk02(256,0,0 ) ETC..)
当您将多维数据集存储到八叉树中时,您还定义了它们的“类型”(材料或某种描述它们的枚举)。通过这样做,您还允许八叉树将这些立方体组合在一起,如果它们成为邻居(即草、石头、沙子等)。然后,这使八叉树算法能够为您处理一些关于如何将它们折叠/压缩成 1 倍大的正方形/矩形基元的智能,从而使您能够减少立方体数量。
归根结底,您有两种方法可以处理立方体世界,第一种是您希望最终用户相信您一次制作了 1x 个立方体,但实际上您实际上是在合并您的网格/顶点数以给出作为表面的一大块的错觉实际上只是 1 倍大的网格,而不是 100 个立方体。只有当用户与立方体交互(即删除/添加)时,您才重新计算您的网格并将多个立方体的幻觉变为现实......但随后您立即将其换回为一个巨大的合并网格。
一旦你让你的八叉树运行并且你将你的块合并成单个网格形式(通过将顶点数组输入到 GPU 缓冲区中),你还必须在八叉树之外围绕剔除做一些额外的工作。有很多方法可以做到这一点,体积剔除(光线追踪)通常是我最推荐的方法,但我认为这可以做得更好。
在我的示例中:https ://vimeo.com/71330826我基本上以不同的方式处理它,因为我知道相机中心点在哪里,并且我还跟踪相机面向的方向,然后基本上将其用作接近焦点剔除,如果有问题的块在相机后面,我会销毁它们,减少我的 GPU 负载。
您还会注意到,每个“块”的外部仍然可见,因为我从创建的每个块的内部剔除,但鉴于每个块都在处理自己的工作量,我仍然渲染实际的块“墙”在相机下方......我后来通过跟踪用户的 Z 深度和相机边界来修复