两点之间的曲线怎么画? OpenGL

How draw curve between two points? OpenGL

我正在尝试在两点之间画一条曲线,具体我留下一张我想要的图片:

此图片取自pdf 第 10 页

我理解应用了 Bresenham algorithm 的概念,但不知道如何实现绘制曲线的概念。

在pdf pseudocode algorithm第11页上显示,但不理解“error”的概念来实现.请如果有人能帮助我理解这一点。我使用 C++ 和 OpenGL。

伪代码:

set up x, y to x0, y0
set up error variable exy for P(x0+1,y0+1)
loop
set pixel x, y
   if ex + exy > 0 then increment x, sub difference error
   if ey + exy < 0 then increment y, add difference error
loop until end pixel

谢谢大家

该算法的思想是您通过函数 f(x, y) = 0 定义曲线。也就是说,函数 f(x, y) 应该 return 为位于曲线上的任何点的 (x, y) 坐标归零。对于不在曲线上的任何点,函数应 return 一个非零值,其大小和符号应分别指示给定点距曲线的距离和方向。此值称为“错误”。

因此,任何像素的“错误”值都可以简单地通过为相关像素的 (x, y) 坐标调用 f(x, y) 来计算。

您引用的这篇论文从较低的抽象级别绘制曲线,以尝试获得性能提升。通常当你去画曲线时,你应该使用更高的抽象,比如 Beziers with De Casteljau's algorithm which your pdf mentions on page 22. I've done this in c++ and it's not hard at all. Pomax has an awesome guide 可以很好地解释它。你基本上细分你的曲线,直到它的许多直线看起来弯曲。然后你画出所有的直线。