【问题标题】:Order of triangles in a 3D object3D 对象中三角形的顺序
【发布时间】:2018-02-05 05:46:55
【问题描述】:

给定一组三角形,它们形成一个封闭的、不重叠的 3D 对象,当对象是凸的时,绘制三角形的顺序无关紧要,前提是只有面向“相机”的三角形是绘制。

但是,当对象部分凹入时,面向相机的两个或多个三角形会在某些角度重叠。在这种情况下,绘制三角形的顺序很重要。

对于我看过的所有几个简单的凹面对象,至少有一个顺序可以正确地以(几乎)所有角度绘制对象。

以甜甜圈为例:面对整个甜甜圈的三角形将在三角形数组中具有较低的索引并首先绘制。背离甜甜圈中心的三角形将具有更高的索引并最后绘制。在内部三角形中也有一个顺序。

此图像显示了绘制三角形的顺序。首先绘制白色,最后绘制黑色。

低阶三角形仍然可以在极端角度被高阶三角形覆盖(较暗的部分将被绘制在较亮的部分之上),但只有很小的余量,如下所示:

这个心形是另一个例子。白色矩形太大,可能以错误的顺序绘制。解剖它们将解决这个问题。

有没有关于这个主题的已知研究?

是否有一种算法可以对 3D 对象的三角形进行排序,以便大多数重叠三角形的情况以任何角度以正确的顺序绘制(不使用三角形)?

【问题讨论】:

  • 这个问题通常在O(1) 时间和O(xs*ys) 空间复杂度中通过Zed(Depth) 缓冲区 解决,其中xs,ys 是视图分辨率。见Mathematically compute a simple graphics pipeline
  • 我赞同 Spektre 的评论。一些补充:一般来说,很难找到独立于视图的三角形顺序。几乎总会有会破坏的配置。即使您有相机位置,也不总是可以对三角形进行排序,因为重叠图可以形成循环。这就是为什么要按像素执行决策的原因,而循环是不可能的。
  • 我从来没有遇到过这样的研究。我在 1980 年代后期剪掉了 3D 牙齿。您的环面将超出多预算。对于复杂的场景(非实时),您将按程序从后到前生成此类对象在那些日子内存低且慢,(最佳顺序)存储网格的使用和访问时间不会带来任何好处。 Z战斗在很大程度上被忽略了。当内存变得便宜时,对排序的需求几乎从 3D(和 CG)中消失了。尽管您可能会在其他 CS 学科(不是 CG)中找到一些东西,其中排序仍然是唯一的解决方案
  • @Blindman67 是的,主题是正确的透明度渲染....但仅在一定程度上,因为更复杂的场景是通过光线追踪完成的。
  • @Spektre 现代 GPU 可以实现各种顺序无关的透明度,从而消除了渲染中对排序的最后需求。我同意光线追踪是我们前进的方向。大规模并行通用 CPU 设备将在未来 10 到 15 年内结束专用 GPU(以及相关的额外成本)

标签: algorithm 3d geometry rendering


【解决方案1】:

您所描述的被称为画家的算法https://en.wikipedia.org/wiki/Painter%27s_algorithm

绘制顺序取决于视图,但必须分割面的情况是例外的。

【讨论】:

    猜你喜欢
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    • 2017-06-21
    • 2019-09-12
    • 1970-01-01
    相关资源
    最近更新 更多