顶点着色器后的OpenGL三角形变形?

时间:2016-05-06 09:58:59

标签: c++ opengl glsl vertex-shader

参考question

有几种方法可以提高巨大网格的渲染速度。我尝试了以下实现:

  1. 只需渲染网格而不进行任何优化或量化。
  2. 我决定将网格量化为CPU上的预处理步骤,并在运行时切换LOD级别(=量化级别)。我提交了整个顶点数据,并使用Drawcall(numberOfNotDegeneratedIndices)进行渲染。 - >快于(0)
  3. 我现在的想法:在顶点着色器中进行整个量化(所有顶点数据都用于计算和动态LOD切换)。在顶点处理步骤之后应该自动发生三角形退化。 Drawcall(numberOfAllIndices) - >并不比(0)
  4. 方法比较:提交的顶点数据量始终相同。 VS调用:(0)==(2)> (1)

    所以我想知道为什么方法(2)在量化和产生三角形退化的情况下不会比(0)快得多?

    我想获得更多信息,为什么它表现得像这样,以及GPU上的瓶颈可能是什么。

1 个答案:

答案 0 :(得分:1)

我讨厌提出明显的问题,但你是否尝试过将帧缓冲区调整为像1x1这样荒谬的东西,并确认瓶颈实际上是顶点处理?

如果没有屏幕截图或其他任何内容,我必须猜测你想要呈现的“巨大”网格是什么样的;我可以想到很多场景,其中巨大的网格导致大量的透支,此时你实际上可以填充边界,使用不同的LOD会产生很小的差异。

听起来很有趣,如果你绘制了很多(可能不可见的)子像素三角形,你也会遇到栅格化性能瓶颈。许多人永远不会因为它们不满足覆盖规则而存在阴影,但是如果你在光栅化阶段获得足够的微小原语,你就会付出与顶点处理无关的惩罚。 LOD可以很好地解决这个问题,所以这不太可能是你的问题。