【问题标题】:OpenGL depth sortingOpenGL深度排序
【发布时间】:2011-05-17 09:29:14
【问题描述】:

我正在使用深度排序进行基本的对象透明度。作为深度,我使用从相机到模型三角形每个中心的距离(平方),我计算为 {(x1+x2+x3)/3, (y1+y2+y3)/3, (z1+z2+z3)/ 3}。虽然结果几乎没问题,但还是有一些错误。

没有排序的猴头

带排序

我能对这些错误做些什么吗?

【问题讨论】:

  • 固定功能还是可编程流水线?
  • 已修复。我制作距离数组,然后对其进行排序并在索引数组中交换相应的值,最后是 glDrawElements。

标签: sorting opengl transparency


【解决方案1】:

没有办法以完美的方式对三角形进行排序。查看 opengl.org wiki 上 Transparency Sorting 文章末尾的示例。

@科斯: 看看Order Independent Transparency with Dual Depth PeelingAlpha to Coverage

【讨论】:

【解决方案2】:

除非您有屏幕对齐的粒子,否则对任意三角形进行排序确实非常困难。为了获得完美的结果,您必须开始拆分三角形。

正如@tibur 所说,您可以使用一些简单的近似值,但order-independent transparency (OIT) 也是一个不错的解决方案。但是,它确实需要 OpenGL 3 时代的图形功能。我有一个implementation available on github,它显示了一些使精确 OIT 相当快的方法。

值得一看的是“adaptive transparency”、“multi-layer alpha blending”和“hybrid transparency”。这些是快速的近似解决方案,但对于常见场景提供了非常好的结果。


一些类似的问题...

【讨论】:

    【解决方案3】:

    从数学上讲,如果你对身体有所了解,它可以帮助分类。

    例如,立方体的面可以单独按重心(面心)进行深度排序。如果正方形面 A 的中心比 B 的中心更近,则 B 将永远不会在 A 前面有任何部分(同样,对于立方体。)

    事实上,对于一个凸体,面可以单独按方向排序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-16
      • 1970-01-01
      • 2013-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多