【问题标题】:Is there a way to cause some triangles to be drawn after others?有没有办法让一些三角形在其他三角形之后绘制?
【发布时间】:2017-01-03 07:00:28
【问题描述】:

这是我目前所拥有的照片。

不用担心黑色四边形之间的间隙。我的问题是红色、绿色和蓝色区域接触时会发生什么。您可以看到一个四边形位于绿色三角形的后面,另一个四边形部分位于蓝色三角形的后面但在绿色三角形的前面。

这一切都是因为我采用 3 个三角形(红色、绿色和蓝色)并在细分着色器中对它们进行细分和变形,然后在几何着色器中绘制四边形。四边形总是在它所连接的三角形之后绘制,但它们总是在一起,因此由镶嵌生成的下一个三角形将在前一个四边形之上。

我的问题是,除了使用两个不同的着色器程序之外,有没有办法避免这种情况?看起来变换反馈可能会起作用,例如将三角形渲染到一个缓冲区,将四边形渲染到另一个缓冲区,然后再将它们组合起来。那行得通吗?它会比切换着色器更快吗? (或者有时更快)还有其他想法吗?

编辑: 对不起,我让我的问题变得更难了。最终,当我固定四边形时,边缘将被 alpha 混合以进行抗锯齿。因此,理想情况下,答案将适用于这种情况。

编辑 2:在最终版本中,三个彩色三角形将一起考虑。最终它们可能都属于相同的渐变或共享纹理,在短期内它们将始终是相同的颜色。 (现在的颜色只是为了帮助我弄清楚发生了什么。)因此可以通过将颜色信息提供给几何着色器中的四边形来完成一些技巧,以帮助上述 alpha 混合。这可能允许使用深度缓冲区。很抱歉没有早点提供所有信息,我不习惯问这种开放式的问题。

【问题讨论】:

  • 你现在是怎么画的?在 OpenGL 中,所有绘图调用都按照您发出它们的顺序发生。
  • 3 个大三角形以 3 个顶点的补丁发送到着色器,然后镶嵌着色器生成更多三角形,在几何着色器中我发出三角形的顶点,如果是边四边形合适的。我知道绘制调用是按顺序发生的,但是当几何着色器一次只能看到一个三角形时,我看不到一种方法可以在三角形之后绘制所有四边形。因此,问题。

标签: opengl glsl shader vector-graphics


【解决方案1】:

您可以将深度 (z) 方向上的小偏移应用到您想要在前面的三角形。然后,只要你的帧缓冲区有深度缓冲区,并且启用了深度测试,它们就会出现在其他三角形的前面。

【讨论】:

  • 现在我很矛盾,我应该提出我最初想要混合四边形边缘以进行抗锯齿的原始问题,因此仅使用深度缓冲区是不够的。我会编辑这个问题,但如果没有更好的答案,我会标记这个。
猜你喜欢
  • 1970-01-01
  • 2014-12-10
  • 2021-11-07
  • 2014-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-17
  • 2023-03-17
相关资源
最近更新 更多