代码之家  ›  专栏  ›  技术社区  ›  Pau

从面的4个顶点获取Z深度

  •  1
  • Pau  · 技术社区  · 16 年前

    如何仅使用每个面的4个顶点对三维对象的面进行z排序?我试过使用一个z缓冲区来存储每个面的平均z值;这在大多数情况下都很有效,但是当一个对象有大小的面时失败了。

    我在flash中构建了一个小的3D引擎,只是为了学习的乐趣,所以我拥有的唯一数据就是这4个顶点和人脸的法线。

    谢谢!

    3 回复  |  直到 16 年前
        1
  •  1
  •   fenomas    16 年前

    你撞到了 Visibility Problem 没有简单的答案。 This page 更详细地描述这个问题,可能会给您一些想法。“真实”的3D引擎解决这个问题的方法是,他们一个像素一个像素地绘制场景像素,并且一直跟踪到目前为止绘制到任何给定像素的最顶端对象的Z坐标。这种方法在flash中不可用,所以我们通常能做的最好是近似或归纳。

    一种常见的方法(在前面的链接中描述)是将面分组为凸多边形,因为它很容易对凸多边形的面进行深度排序,并且相对容易对多边形本身进行深度排序。如果这是可行的,我会这样做的。

        2
  •  0
  •   ChrisF    16 年前

    当所有面大小大致相同时,Z缓冲效果最好。如果你有比其他人大得多的,那么他们会“覆盖”那些给你人造物品的小东西。

    唯一的解决方案是将较大的面向下分解为较小的面,使其接近平均大小。

        3
  •  0
  •   MPG    16 年前

    另一个很容易实现的方法是 BSP trees . 它的一个问题是,在3D中,它有一些非常糟糕的性能特征。你通常只会用一些非常奇怪的球壳击中它,所以它可能值得尝试,看看它在你的情况下是如何工作的。

    其基本思想是建立一个二叉树,其中每个内部节点都有一个平面方程,每个叶子都有一个多边形。在每个内部节点上,左子节点中的所有多边形都位于平面的一侧,右子节点中的所有多边形都位于另一侧。你必须分割任何穿过平面的多边形。坏的情况就是这样出现的。如果你有这样安排的多边形,每个多边形的平面分割所有其他的多边形,那么它会变得难看。

    推荐文章