我的问题是,渲染的场景中有一些像素
似乎丢失/不可见,因此与我的透明色具有相同的颜色
颜色。有趣的是,只有在MSAA关闭的情况下才会发生这种情况。

我的第一个想法是,可能与以下事实有关:所有三角形都是重叠的,并且由于投影矩阵而有所变形,但是这些伪像似乎仅出现在直线上,而不是在边缘上。

我读到有关在另一个问题中仅对所有内容应用1.00001的比例,但是对我来说,这似乎是便宜的黑客,它可能会导致其他问题。尽管在使用硬件多重采样时这些伪像似乎有所减少,但我想知道是否还有其他方法可以解决此问题。

编辑:



如前所述,一种可能的解决方案是将大三角形拆分为小三角形,以确保所有重叠的顶点都是相同的(即取消贪婪的网格划分)。但就我而言,由于性能方面的原因,我希望保持贪婪的网格划分。

最佳答案

如果边缘完全匹配,则OpenGL(和所有其他硬件光栅化器)仅保证两个三角形之间的边缘无间隙渲染。这意味着您不能仅在另一个三角形的边缘旁边有一个三角形。两个三角形之间的共享边必须具有相同的顶点。

因此,如果在短三角形旁边有一个长三角形,您要做的就是将长三角形分成几个三角形,以便在两个三角形之间正确共享边的共享部分。

由于您似乎正在构建一个由多维数据集构成的世界,因此这对您来说应该相当容易。

您要做的另一件事是确保两个三角形之间的两个共享顶点是二进制相同的。顶点着色器的gl_Position输出必须完全相同。因此,如果要计算VS中多维数据集的顶点的位置,则需要以保证二进制相同结果的方式进行此操作。



然后,您需要确定哪个更重要:性能或正确性。因为无法强制光栅化器使这些边缘无间隙。这是浮点精度等问题,在不同的硬件上,浮点精度总是会有所不同。

关于c++ - 像素间隙在哪里来自OpenGL?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39958039/

10-11 16:39