了解OpenGL中的一些术语?

时间:2018-04-16 16:22:06

标签: opengl graphics

我在理解此处的官方文档中使用的术语时遇到了一些困难(https://www.khronos.org/opengl/wiki/Rendering_Pipeline_Overview

  1. 它说准备顶点数组数据可以是给定3D位置数据和UV纹理坐标的列表,以及索引列表,它可以生成顶点流。< / p>

  2. 然后需要解释这个顶点流,以便OpenGL可以对其进行操作。例如,12个顶点的流可以解释为4个独立的三角形或10个相关的三角形。

  3. 但对我来说,似乎上面的步骤将许多步骤结合在一起,即顶点着色和原始组合。这些步骤真的完全发生了吗?

    例如,文档在顶点着色中说明了流中的顶点被转换为输出顶点。这是如此普遍,似乎已经在&#34;第一&#34;准备顶点数组数据的步骤。

    以下是我对整个管道的基本概念:

    1. 3D位置形式的顶点数据作为列表输入(流)输入,另外还可以输入纹理坐标列表。

    2. 消耗此数据流并与索引列表一起按顺序排列顶点。然后以特定方式解释有序的顶点列表(例如,每3个顶点= 1个基元或每个连续3个顶点= 1个基元)。

    3. 然后将顶点发送到顶点着色器,顶点着色器也在顶点列表中进行输入并计算顶点法线等属性,然后将它们作为顶点的输出流发送。

    4. 然后有通过tessalation着色器计算额外图元的可选步骤,或使用作用于tessalated图元的几何着色器来创建更复杂的图元。

    5. 现在我们转到Primitive Assembly,这是一个与计算原语的早期阶段不同的过程。此步骤旨在将原语分解为成许多基本原语。例如。形成ONE原语的12个顶点的列表被分解为11个基本行原语。

    6. 然后我们继续修剪或删除不在相机视图中的所有顶点。

    7. 下一步是光栅化,我们根据光栅化器消耗的基本图元流生成片段。这些片段比基本图元小得多,并且用于覆盖像素,而不是像素输出那样进行计算上昂贵的计算(如光线跟踪)。这会产生源自基本图元的片段输出。

    8. 我们将这个片段流发送到片段着色器,它在功能上与顶点着色器类似。它消耗此片段的输入流并处理每个片段的颜色,查找纹理中的颜色(如果有)并修改像素深度值。

    9. 此后接下来会发生什么?我在那里阅读了per-sample processing,但它并没有解释很多。

      我在理解方面的差距:

      1. 片段是如何工作的?&#34;覆盖&#34;最终屏幕上的像素?

      2. 在第8步中,我们是否真的计算了像素深度值,还是仅计算片段深度值?

      3. 每个片段的输出如何知道它应覆盖哪些像素(相对)?

      4. 在光栅化中,我认为生成的片段是三角形。三角形是如何从基本原语形成的?

1 个答案:

答案 0 :(得分:1)

您的理解中存在一些轻微的不准确之处,这可能是您混淆的原因。让我试着纠正它们:

2

此时(在顶点着色器之前),还没有原语。每个顶点都是自己处理的,与之后发生的事件无关。如果你有一个索引列表,这只会告诉GPU要处理哪些顶点数据。但即便如此,还没有原始人。这些只会由基元组装步骤生成。

5

原始程序集从顶点流创建基元(取决于您的绘制调用参数和可能的着色器配置)。基本上,它正在执行您在步骤2中描述的内容。只有三种类型的基元(点,线,三角形)。一旦你有了一个例如三角形,它永远不会像你建议的那样分解成更小或更基本的三角形。因此,原始组装并没有做太多。它只是将右顶点数据组合到正确的图元中(例如,三个后续顶点可以组成一个三角形)。

7。

片段不会偶然覆盖像素。它们基本上像素。更准确地说,它们代表由屏幕上的给定像素表示的图元的一部分。并且为所有这些片段/像素调用片段着色器。在DirectX环境中,此阶段称为像素着色器,它使连接更加明确。例如。将10像素宽的水平线光栅化为10个片段。在此阶段之外不再有三角形或其他原语。

现在回答你的问题。我相信其中许多已经在上面得到了回答。

  1. 我相信这已经得到了解答。您可以查看一些光栅化算法以了解实现。基本思想是收集基元覆盖的所有像素。
  2. 这是片段的深度值。管道配置决定了该值发生了什么。例如。如果你有标准的深度测试,管道会将片段的深度值与当前像素的深度值进行比较,如果像素的深度值大于片段的深度值,则更新像素的深度值(即,如果片段位于投射到其上的其他所有片段的前面)这个像素)。
  3. 从上述说明中可以清楚地看出这一点。片段与像素直接对应。
  4. 也应该回答。它们不是三角形。
  5. 以上所有内容都假设了一些基本的渲染设置,以便于阐明。诸如多重采样等更先进的技术可能需要对上述陈述进行略微调整。