Opengl 栅格化两个相邻多边形的共享边

Opengl 栅格化两个相邻多边形的共享边,opengl,directx,metal,vulkan,rasterizing,Opengl,Directx,Metal,Vulkan,Rasterizing,在扫描线渲染中,当光栅化多边形(通常为三角形)时,如果两个多边形共享一条边(即,它们共享两个连续顶点),则此共享边上的像素应仅渲染一次。(这是必要的,有几个原因。最常见和最明显的原因是使用半透明纹理时:如果共享边像素渲染两次,将影响这些像素的透明度,使共享边不那么透明,因此可见。) 所有扫描线渲染器,包括图形硬件,都需要处理这个问题。然而,就我的一生而言,我找不到一个清晰、易懂、高效的算法来实现这一点,即使是在大量的谷歌搜索之后 我不仅在寻找理论和解决方案的模糊描述,而且在寻找实际的具体伪代码。

在扫描线渲染中,当光栅化多边形(通常为三角形)时,如果两个多边形共享一条边(即,它们共享两个连续顶点),则此共享边上的像素应仅渲染一次。(这是必要的,有几个原因。最常见和最明显的原因是使用半透明纹理时:如果共享边像素渲染两次,将影响这些像素的透明度,使共享边不那么透明,因此可见。)

所有扫描线渲染器,包括图形硬件,都需要处理这个问题。然而,就我的一生而言,我找不到一个清晰、易懂、高效的算法来实现这一点,即使是在大量的谷歌搜索之后


我不仅在寻找理论和解决方案的模糊描述,而且在寻找实际的具体伪代码。最好是在渲染器和图形硬件中实际使用的算法。有人能告诉我正确的方向吗?

谷歌“光栅化规则”。特别是“左上光栅化规则”(最常见的一个)也检查了一下,我用谷歌搜索过,还有许多其他类似的关键字,但没有发现任何有用的东西。大多数结果只是描述了OpenGL/Direct3D的功能,但没有给出任何算法。有几页给出了一个实际的渲染算法,但到目前为止,我只发现了非常未优化的低效算法,基本上只需在整个屏幕上查看(在每个像素上使用大量乘法)它是否在三角形内。(例如,一个这样的页面评论:“这个版本作为概念证明是有效的,但高度未优化”,这相当有说服力。)左上角的规则在我看来总是定义不清。Vulkan规范甚至没有指定规则是什么,只是其中一个示例获胜。我更改了标签,试图让相关专家更容易看到这个问题。谷歌“光栅化规则”。特别是“左上光栅化规则”(最常见的一个)也检查了一下,我用谷歌搜索过,还有许多其他类似的关键字,但没有发现任何有用的东西。大多数结果只是描述了OpenGL/Direct3D的功能,但没有给出任何算法。有几页给出了一个实际的渲染算法,但到目前为止,我只发现了非常未优化的低效算法,基本上只需在整个屏幕上查看(在每个像素上使用大量乘法)它是否在三角形内。(例如,一个这样的页面评论:“这个版本作为概念证明是有效的,但高度未优化”,这相当有说服力。)左上角的规则在我看来总是定义不清。Vulkan规范甚至没有指定规则是什么,只是其中一个示例获胜。我更改了标签,试图让相关专家更容易看到这个问题。