如何在两点之间绘制曲线? OpenGL的

时间:2016-10-10 01:23:03

标签: c++ opengl graphics rasterizing

我试图在两点之间画一条曲线,特别是我留下了我想要的图片:

enter image description here

此图片来自第10页上的pdf

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

在显示的pdf pseudocode algorithm第11页上,但不理解要实施的“错误”的概念。如果有人能帮助我理解这一点。我使用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

谢谢大家。

2 个答案:

答案 0 :(得分:2)

你引用的这篇论文从低抽象层次绘制曲线,试图获得性能提升。通常当你去绘制曲线时,你应该使用更高的抽象,例如你的pdf在第22页提到的带有De Casteljau's algorithm的Beziers。我已经用c ++完成了这个并且它根本不难。 Pomax有一个awesome guide可以很好地解释它。你基本上将你的曲线细分,直到它的许多直线看起来都是弯曲的。然后你绘制所有的直线。

答案 1 :(得分:1)

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

因此,只需为相关像素的f(x, y)坐标调用(x, y)即可计算任何像素的“误差”值。