【问题标题】:Supply 4 vertices to geometry shader in OpenGL在 OpenGL 中为几何着色器提供 4 个顶点
【发布时间】:2015-10-13 05:30:58
【问题描述】:

我目前有一些 VAO 和一个索引列表。这个想法是在几何着色器中处理 4 个元素的组。选择组的方式是如果我有列表(1,2,3,4,5,6,7,8,...),那么组将是((1,2,3,4),(5,6,7,8),...)

花了几个小时的编码后,我意识到几何着色器不接受 4 个顶点图元。我想知道是否有办法解决它。也许选择一个“激发顶点”并将其他 3 个附加到它作为顶点着色器阶段的附加属性(不过我怀疑这是可能的)。

【问题讨论】:

  • 您可以将 4 个顶点组合成一个大“顶点”,并将它们作为点传递给几何着色器。
  • 我认为当您没有索引列表时这很容易。在这种情况下,我只需按照我想要的顺序放置所需的值,并将 VAO 设置为读取更大的块。如果是索引列表(在这种情况下是必要的),该怎么做?

标签: opengl geometry-shader


【解决方案1】:

几何着色器接受具有 4 个顶点的图元作为输入:GL_LINES_ADJACENCY

这种原始模式可能适用于每个线段需要两个相邻线段的线,但它不限于任何特定用例 - 它只提供 4 个顶点作为输入,并且可以这样使用(它可以也可用于使用几何着色器模拟已弃用的GL_QUADS 原始模式)。

【讨论】:

  • 谢谢!我认为GL_LINES_ADJACENCY 需要渲染网格的一些特殊属性。所以毕竟它只是 GS 的一个简单的 4 输入顶点,GL_LINES_ADJACENCY 的正确含义可能会在管道的后期阶段给出(这不是我的情况,因为我正在做变换反馈)。
  • @Gonzalo:实际上,后来没有“正确的含义”。唯一能给几何着色器的输入图元任何意义的是几何着色器本身。仅当您实际提供每个输入图元的相邻顶点的信息时,才能实现“邻接”的含义。但是 GL 真的不在乎你到底放了什么,以及其他原语是否会共享数据。如果你真的需要邻接,这意味着你必须为每个输入原语冗余地指定这样的相邻信息。
  • 哦,对了。我在考虑到达光栅化器的线,但正如你所说,几何着色器可以输出与相邻线不同的东西。所以GL_LINES_ADJACENCY 这个名字只是一个关于如何使用原始模式的建议,尽管不限于邻接目的。谢谢!
  • @Gonzalo:几何着色器不仅可以输出除相邻线之外的其他图元,而且绝对必须这样做。管道的光栅化器和其他阶段根本无法处理邻接原语(出于显而易见的原因)。邻接基元仅作为几何着色器的输入有效。如果没有使用 GS,也​​无法绘制此类图元。
  • @Gonzalo:实际上,我在上一条评论中的最后一句话可能是错误的。似乎可以在没有 GS 的情况下绘制邻接图元,只是忽略相邻的顶点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 2016-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多