有关OpenGL透明性的一些问题

埃诺洛特

我有两个关于OpenGL混合的问题。

1)我知道我必须先绘制不透明的对象,然后再从后到前绘制不透明的对象。因此,我根据与中心的距离(0,0,0)将它们放在列表中。但是,变换(旋转和平移)会影响我测量距离的“中心”吗?

2)其次,如果我绘制的项目是三角形,如何测量距离?到其中心?到它的正中心?

雷托·科拉迪(Reto Koradi)

当然,您需要将转换考虑在内才能进行排序。应用所有转换,然后按结果深度(z坐标)进行排序是最直接的方法。

实现同一事物的最有效的方法是对每个对象(或使用相同变换的一组对象)对视图方向应用一次逆变换,然后计算每个顶点/三角形的深度作为点积具有逆变换的视图向量的顶点的角度。每个三角形只需要一个点积,而不是对它们应用完整的变换。三角形的数量通常比对象的数量大几个数量级。

关于使用哪一点:确实没有适用于所有情况的解决方案。三角形的中心应与任何东西一样好。整个方法是一个近似值,在许多情况下都可以很好地起作用,但在某些情况下并不完全正确。

为了说明依赖于订单的透明度的基本挑战,让我们看几个示例。在下图中,视图方向是从左到右,并且我们看了两个三角形A和B的边缘:

             \
              \
               B
                \
               \ \
                \ \
view ----->      \
                  A
                   \
                    \

从视觉上看,很明显B位于A后面,需要先绘制。然而:

  • B的最接近点比A的最接近点更靠近视点。
  • B的最远点比A的最远点更靠近视点。
  • B的中心点比A的中心点更靠近视点。

您无法通过比较每个三角形中的一个深度值来正确地对它们进行排序。为了正确处理此问题,您必须考虑几何形状,并使用更复杂的条件对其进行正确排序。

在某些情况下,没有有效的订单:

               \    /
                \  /
view ----->      \/
                 /\
                B  A
               /    \

在这里,没有针对A和B的有效排序顺序。B的一部分在A的后面,A的一部分在B的后面。只要您有相交的三角形,情况就是如此。正确解决此问题的唯一方法是分割三角形。

在没有有效顺序的情况下,也有没有任何相交三角形的配置。这是一个有4个三角形的示例,这次是从顶部看:

             ___________
   |\        \          |
 __|_\________\         |___
|              \        |__/
|         ______\       |
|________/       \      |
   |     \        \_____|__
   |      \_______/        |
 __|       \               |
/__|        \______________|
   |         \        \ |
   |__________\        \|

这些困难是为什么与订单无关的透明度呈现方法如此吸引人的重要原因,而不仅仅是避免排序的开销。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有关OpenGL透明度的一些问题

来自分类Dev

有关SymmetricDS Embedded的一些问题

来自分类Dev

有关班级的一些问题

来自分类Dev

有关资源的一些问题

来自分类Dev

有关Angularjs指令的一些问题

来自分类Dev

有关轮询的一些问题

来自分类Dev

有关光缆的一些问题

来自分类Dev

有关异常安全性和内存泄漏的一些问题

来自分类Dev

有关带有Openlayers3的WFS-T的一些问题

来自分类Dev

有关“ angularJS与Plupload一起使用的一些问题

来自分类Dev

有关“ angularJS与Plupload一起使用的一些问题

来自分类Dev

有关克隆/复制TR的一些问题

来自分类Dev

有关使用MongoDB Java驱动程序的一些问题

来自分类Dev

有关表格,css中的位置的一些问题

来自分类Dev

有关何时使用片段和活动的一些问题

来自分类Dev

使用jfugue转换密钥-有关Jfugue的一些问题

来自分类Dev

有关沙发床复制品细节的一些问题

来自分类Dev

有关Objective-C的一些问题

来自分类Dev

有关angular2提供程序的一些问题

来自分类Dev

Scrapy-有关刮论坛的一些问题

来自分类Dev

有关C语言中内存分配的一些问题

来自分类Dev

有关Python功能及其工作方式的一些问题

来自分类Dev

有关Progress-4GL中事件处理的一些问题

来自分类Dev

C ++ STL容器-有关类型的一些问题?

来自分类Dev

有关SSH密钥身份验证的一些问题

来自分类Dev

有关原型和数组的一些问题

来自分类Dev

有关解析multiplt Spring View解析器的一些问题

来自分类Dev

有关沙发床复制品细节的一些问题

来自分类Dev

有关指向班级成员的指针的一些问题