OpenGL如何渲染三角形?

时间:2012-07-28 17:58:17

标签: c++ algorithm opengl language-agnostic rendering

我需要一种算法来渲染像素完美的三角形而不使用OpenGL。

我在哪里可以获得像OpenGL这样的算法?最好是单线程。

它必须像OpenGL那样做,因为OpenGL不会在共享边缘的两个三角形上留下间隙或重叠像素。 Scanline方法会产生这些错误:http://joshbeam.com/articles/triangle_rasterization/。我也试过这个半空间的算法:http://devmaster.net/forums/topic/1145-advanced-rasterization/但是我无法让它起作用(呈现胡言乱语)。

  • OpenGL是如何做到的?这是一项如此密集的工作,我应该忘记它并使用(错误的)扫描线方法吗?

  • 我在哪里可以获得算法?

我更喜欢C ++解决方案,但语言不是问题。

3 个答案:

答案 0 :(得分:3)

OpenGL使用基于扫描线的方法,正如Alan和你的文章链接所提到的那样。但是,管理差距不是数学准确性的问题。您需要为三角形边缘上的像素添加其他约定。 OpenGL使用的约定与Direct3D使用的约定相同。它被称为“左上角”,我见过的最佳解释是MSDN rasterization rules article

答案 1 :(得分:2)

典型的OpenGL实现将使用与第一个链接大致相同的扫描线/光栅化方法。避免间隙和重叠的关键是要非常小心数学,以避免舍入误差的不确定性。

如果您将像素视为具有某些有限区域的屏幕的正方形,则可以获得重叠,因为相邻的三角形通常都会与像素重叠。但相反,如果你认为像素是广场中心的无限小点,那么你可以保证没有间隙或重叠。

您还需要定点整数运算的算术确定性,而不是浮点数学的舍入误差。每个光栅化扫描线的左端从大于或等于起始扫描值的第一个像素开始。光栅化扫描线的右端在第一个像素之前的一端严格小于结束扫描值。

答案 2 :(得分:1)

看看OpenMesa,一个OpenGL规范的开源实现。它目前支持OpenGL 3.0。