有没有办法让一些三角形在其他三角形之后绘制?
Is there a way to cause some triangles to be drawn after others?
这是我目前所拥有的照片。
不用担心黑色四边形之间的间隙。我的问题是红色、绿色和蓝色区域接触时会发生什么。可以看到一个四边形在绿色三角形后面,另一个四边形部分在蓝色三角形后面但在绿色三角形前面。
这一切都是因为我采用了 3 个三角形(红色、绿色和蓝色)并在镶嵌着色器中对它们进行镶嵌和变形,然后在几何着色器中绘制四边形。四边形总是在它所附着的三角形之后绘制,但它们总是在一起,因此细分生成的下一个三角形将在前一个四边形之上。
我的问题是,除了使用两个不同的着色器程序之外,还有什么方法可以避免这种情况吗?看起来变换反馈可能会起作用,比如将三角形渲染到一个缓冲区,将四边形渲染到另一个缓冲区,然后再将它们组合起来。那行得通吗?它会比切换着色器更快吗? (或有时更快)还有其他想法吗?
编辑:
对不起,我让我的问题更难了。最终,当我修复四边形时,边缘将进行 alpha 混合以进行抗锯齿处理。所以理想情况下,答案会在那种情况下起作用。
编辑 2:在最终版本中,三个彩色三角形将一起考虑。最终它们可能都是相同渐变的一部分或共享纹理,在短期内它们将始终是相同的颜色。 (现在的颜色只是为了帮助我弄清楚发生了什么。)因此,可以通过将颜色信息提供给几何着色器中的四边形来完成一些技巧,以帮助进行上述 alpha 混合。这可能允许使用深度缓冲区。抱歉没有早点给出所有信息,我不习惯问这种开放式的问题。
您可以在深度 (z) 方向上对您想要在前面的三角形应用一个小的偏移量。然后,只要你的帧缓冲区有深度缓冲区,并且启用了深度测试,它们就会出现在其他三角形的前面。
这是我目前所拥有的照片。
不用担心黑色四边形之间的间隙。我的问题是红色、绿色和蓝色区域接触时会发生什么。可以看到一个四边形在绿色三角形后面,另一个四边形部分在蓝色三角形后面但在绿色三角形前面。
这一切都是因为我采用了 3 个三角形(红色、绿色和蓝色)并在镶嵌着色器中对它们进行镶嵌和变形,然后在几何着色器中绘制四边形。四边形总是在它所附着的三角形之后绘制,但它们总是在一起,因此细分生成的下一个三角形将在前一个四边形之上。
我的问题是,除了使用两个不同的着色器程序之外,还有什么方法可以避免这种情况吗?看起来变换反馈可能会起作用,比如将三角形渲染到一个缓冲区,将四边形渲染到另一个缓冲区,然后再将它们组合起来。那行得通吗?它会比切换着色器更快吗? (或有时更快)还有其他想法吗?
编辑: 对不起,我让我的问题更难了。最终,当我修复四边形时,边缘将进行 alpha 混合以进行抗锯齿处理。所以理想情况下,答案会在那种情况下起作用。
编辑 2:在最终版本中,三个彩色三角形将一起考虑。最终它们可能都是相同渐变的一部分或共享纹理,在短期内它们将始终是相同的颜色。 (现在的颜色只是为了帮助我弄清楚发生了什么。)因此,可以通过将颜色信息提供给几何着色器中的四边形来完成一些技巧,以帮助进行上述 alpha 混合。这可能允许使用深度缓冲区。抱歉没有早点给出所有信息,我不习惯问这种开放式的问题。
您可以在深度 (z) 方向上对您想要在前面的三角形应用一个小的偏移量。然后,只要你的帧缓冲区有深度缓冲区,并且启用了深度测试,它们就会出现在其他三角形的前面。