c++ - 完美的填充三角形渲染算法?

标签 c++ language-agnostic geometry rendering

我在哪里可以获得渲染填充三角形的算法? 编辑 3:我不能使用 OpenGL 来渲染它。为此,我需要每像素算法。

我的目标是从三角形渲染一个正多边形,所以如果我使用这个三角形填充算法,每个三角形的边缘不会重叠(或在它们之间产生间隙),因为如果我使用例如它会导致渲染错误XOR 来渲染像素。

因此,渲染质量应该与 OpenGL 渲染相匹配,所以我应该能够定义 - 例如 - 一个带有 N 个顶点的圆,它可以像任何大小的圆一样正确渲染;所以它不像一些三角形填充算法那样只使用整数坐标来渲染它。

我需要能够控制自己填充三角形的能力:我可以添加我自己的关于如何渲染每个单独像素的逻辑。所以我需要渲染背后的裸代码,以完全控制它。绘制数以万计的三角形应该足够有效,而无需等待超过一秒钟。 (我不确定它最多能有多快,但我希望它不会超过 10 秒)。

首选语言是 C++,但我可以根据需要转换其他语言。

如果没有免费的算法,我在哪里可以学习自己构建一个,这实际上有多难? (我=数学菜鸟)。

我添加了 OpenGL 标签,因为这与它有某种关系。

编辑 2:我在这里尝试了算法:http://joshbeam.com/articles/triangle_rasterization/但它似乎有点 splinter ,这是一个用它渲染的带有 64 个三角形的圆:
enter image description here

但是如果放大,你可以看到错误:
enter image description here

说明:有2个像素与其他三角形颜色重叠,这是不应该发生的! (或透明度或异或等效果会产生不良渲染)。

似乎错误在较小的圆圈上更明显。如果我想对像素进行 XOR 效果,这是 Not Acceptable 。

我该怎么做才能解决这些问题,以便完美地填充它而不会出现重叠的像素或间隙?

编辑 4:我注意到渲染非常小的圆圈不是很好。我意识到这是因为坐标确实被转换为整数。如何将坐标视为浮点数并使其像在 OpenGL 中一样精确完美地渲染圆?下面是小圆圈看起来有多糟糕的例子:

enter image description here

注意 OpenGL 渲染是多么完美!这就是我想要实现的,而不使用 OpenGL。 注意:我不只是想渲染完美的圆形,而是任何多边形形状。

最佳答案

总是有 half-space method .

关于c++ - 完美的填充三角形渲染算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11688738/

相关文章:

c++ - std::function -> 函数指针

language-agnostic - 什么是优先队列,它有什么用

algorithm - 按求和算法对数字进行排序

language-agnostic - 对象的行为回答什么问题?

c++ - 在派生类的方法中使用基类的方法

c++ - 与sqlite数据库qt c++同步文件

Python scikits 学习 - 分离超平面方程

algorithm - 如何从四个可以平移或旋转的点中找到一个点的坐标?所有这些点形成一个刚体

algorithm - 最大线性维度 2d 点集

Android NDK C++ openGL ES 2 上下文显示效果不佳