如果在两个不同颜色的同一位置有两个顶点,片段会得到什么颜色?

时间:2010-11-10 08:43:09

标签: glsl fragment geometry-shader

我对OpenGL渲染管道有疑问。

我最近一直在阅读有关GLSL几何着色器的理论。我想我确实理解了如何发射新几何体并为新顶点指定颜色的基础知识。但是,如果其中一个新顶点的位置与从顶点着色器进入的顶点位置相同,我不确定片段会得到什么颜色。

考虑这个例子: 据我所知,我能够使用Vertex着色器处理单个顶点。我进行了一些转换并将位置存储在glPosition中。还可以为该顶点分配颜色,例如,将其存储到glFrontColor。举个例子,我给它红色。如果所有通道都有32位,则为0xFFFFFFFF'00000000'00000000'00000000,对吗? 接下来,涉及几何着色器。我希望我的几何着色器发出一些额外的顶点。它们中的至少一个位于与从顶点着色器进入的原始顶点完全相同的位置。但是,它被赋予另一种颜色,例如绿色。那将是0x00000000'FFFFFFFF'00000000'00000000,对吗? 迟早,在每个顶点都被处理之后,光栅化就会发生。据我所知,两个顶点都被光栅化,因此将成为完全相同的片段。那么,我们去吧。这个特定片段会得到什么颜色?是否有某种自动混合,片段变黄?或者是红色还是绿色?

这个问题可能很愚蠢。但我对此并不清楚,如果有人能为我澄清这一点,我会很感激。

如果没有混合(我假设),我怎么可能创建混合效果?

非常感谢 沃尔特

2 个答案:

答案 0 :(得分:2)

假设您正在渲染点(这似乎是您所描述的),具有不同颜色的两个顶点将在同一位置产生两个片段(每个顶点一个)。将输出的最终颜色取决于每个的Z值,混合函数集以及它们的处理顺序(实际上是随机的 - 除非你做一些额外的同步,否则你不能指望任何一个顺序东西,所以你需要设置你的混合功能/ Z-culling这样无关紧要。)

答案 1 :(得分:0)

我认为如果它们与x y和z具有完全相同的值,它们将是Z-Fighting

关于混合:

这与可编程管道分开,因此您无需在着色器中完成大部分工作。 首先启用与glEnable(GL_BLEND)的混合, 然后使用glBlendFunc指定所需的混合函数,最常见的是glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)。 现在,顶点只需要在gl_FragColor.a设置一个alpha值,它们的颜色会混合。