简体   繁体   中英

How draw curve between two points? OpenGL

I'm trying to draw a curve between two points, specifically I leave a picture of what I want:

在此输入图像描述

This image was taken from this pdf on page 10 .

I understand that applies the concept of Bresenham algorithm but do not know how to implement the concept for draw the curve.

On page 11 of the pdf pseudocode algorithm shown, but do not understand the concept of " error " to implement. Please if anyone can help me understand this. I work with C ++ and OpenGL.

Pseudocode:

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

Thanks you all.

This paper you cited draws curves from a low level of abstraction to try to gain performance increases. Normally when you go to draw curves you should use a higher abstraction such as 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 that explains it well. You basically subdivide your curve until it's many straight lines looks curved. Then you draw all the straight lines.

The idea of this algorithm is that you define your curve by a function f(x, y) = 0 . That is to say that the function f(x, y) should return zero for the (x, y) coordinates of any point which lies on the curve. For any point which does not lie on the curve, the function should return a nonzero value, whose magnitude and sign should indicate the distance and direction, respectively, of the given point from the curve. This value is referred to as “error”.

Thus, the “error” value for any pixel can be computed simply by calling f(x, y) for the (x, y) coordinates of the pixel in question.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM