Can I evaluate a Bezier curve using opengl evaluators?

Started by
4 comments, last by RobTheBloke 17 years ago
Hi! My question is: Can I evaluate a Bezier curve using opengl evaluators? I need to evaluate this curve in my animations, and I found an algorithm called de Casteljau, but I would like to know if there is another way, for instance using opengl evalutors. Thanks a lot!
I've seen things you people wouldn't believe. Attack ships on fire off the shoulder of Orion. I watched C-beams glitter in the dark near the Tannhauser gate. All those moments will be lost in time, like tears in rain. Time to die.
Advertisement
don't use evaluators for that. Rendering a curve is not really what you want if you only want to pull out a single point.

P = (P0*(1-t)^3) + (P1*3*t*(1-t)^2) + (P2*3*t^2*(1-t)) + (P3*t^3)

I have a cuerve between x0,y0 and x1,y1 and their control points.
I have a "x" which is between these points, so I look for "y"

I don´t understand you, RobTheBloke, in any case thanks.

By the way, any idea? My teacher in my university told me that using opengl I can evaluate a bezier curve, instead of using de Casteljau algorithm

Any suggestion?

Thanks a lot friends!
a curve between x0,y0 and x1,y1 is a straight line. for a (cubic) bezier curve you use 4 control points. (p0,p1,p2,p3). In other words....

x = (x0*(1-t)^3) + (x1*3*t*(1-t)^2) + (x2*3*t^2*(1-t)) + (x3*t^3)
y = (y0*(1-t)^3) + (y1*3*t*(1-t)^2) + (y2*3*t^2*(1-t)) + (y3*t^3)

and do the same for z if it's 3D.... [ t^2 == t to the power of 2]

(where t goes between 0 and 1). Now since you have asked to use this curve to animate something, you'll only need to evaluate a single point at any given time, t. Bezier curves are themselves parametric (like pretty much every curve in 3D graphics). functions of x to determine y aren't great for evaluating curves for rendering or animating.

If you only have 2 control points, then you can use hermite curves, but you'll also need 2 tangent vectors (which is basically just a re-working of the bezier equation).

If you are using more than 4 control points, then you want to start thinking about Nurbs really.

In general though, glEvaluators really do suck quite a lot (they are a software only implimentation, so there is no benefit over using them compared to rolling you own code).

see link
Hi!

Well, sorry, I had to explain me better.

I have 4 points, start, end and 2 control points.

But I disagree with you, t is NOT time, t is a parameter between 0 and 1. But it doesn´t avaluate the curve in function of X ( to get Y ).

In fact, in your link, the beizer example, evaluate the curve in function of t, not x or y, and the curves, really are segments, quality depends of diferent t values. Do you understand me? ( english is dificult for me)

My idea about animation is to do a presampling, but that is another question...

So my question is, must I use Casteljau or can I use OpenGL?

Thanks a lot for your time!
Thanks RobTheBloke!
Quote:Original post by Anonymous Poster
I have 4 points, start, end and 2 control points.


ok.

Quote:
But I disagree with you, t is NOT time, t is a parameter between 0 and 1.


when you are animating, t is time (scaled maybe, but still essentially time). Since your 4 control points are essentially keyframes.

Quote:But it doesn´t avaluate the curve in function of X ( to get Y ).


correct. Bezier curves don't do that.

Quote:In fact, in your link, the beizer example, evaluate the curve in function of t, not x or y


yes. That is how a bezier curve is defined. It is a parametric curve based upon a function of t. It is not an y = f(x) type curve. It is P = f(t)

Quote:...and the curves, really are segments, quality depends of diferent t values. Do you understand me? ( english is dificult for me)


yes. That is because openGL can only render line segments. It cannot render implicit curves. Therefore, gluNurbs (and the code sample i linked) approximates a curve into a series of line segments, the quality of which, you decide. The higher the number of segments, the better the approximation becomes - but it is always an approximation to a curve.

Quote:My idea about animation is to do a presampling, but that is another question...


But very much linked into what you are asking, so you might want to talk about this a bit more. gluNurbs *draws* curves....

Quote:So my question is, must I use Casteljau or can I use OpenGL?


To do what? If all you want to do is draw a curve, then you can use either, it doesn't matter (though i'd recommend De Casteljau). However, if you want to use the curve equations to perform some mathematical operation (ie, if you do not want to draw curves), then use De Casteljau.....

FYI, de-casteljau doesn't give you a huge saving over the equation i posted above. In fact, the equation above will probably be more efficient since it does not require recursion. De-Casteljau is faster when you start talking about evaluating curves of a higher parametric order - ie non cubic, t^80 type curves. However for curves like that, you really want b-splines or NURBS since they are way more efficient.

This topic is closed to new replies.

Advertisement