0
\$\begingroup\$

well in short im looking for something like this as open source.
https://www.youtube.com/watch?v=Cut3_A0Xm3Y

i need to implement especially the Bezier curve editing in my app in open gl . any ideas where i can find such open source implementation ? ( can be c++ or java )

\$\endgroup\$

closed as unclear what you're asking by Mario, Anko, jhocking, Kromster, Trevor Powell Jan 5 '15 at 0:12

Please clarify your specific problem or add additional details to highlight exactly what you need. As it's currently written, it’s hard to tell exactly what you're asking. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.

  • \$\begingroup\$ "This video is not available." How about a screenshot or description? Do you just want to draw a bezier curve or want to move the points etc.? Also keep in mind that this site is more about "I've written this, it's not working, why?" It's not meant as a loose collection of links or suggestions/recommendations. \$\endgroup\$ – Mario Jan 2 '15 at 8:34
  • \$\begingroup\$ the video does show on my browser .. i know what this site about , the problem is i dont have any starting point , i want to able to draw Bezier curve with handlers to change its curve . \$\endgroup\$ – user3689 Jan 2 '15 at 9:15
  • \$\begingroup\$ You want to know how to draw a bezier curve or how to make an interactive graphic editor? Those should be two (or more) separate questions as making an editor is quite a complex task. \$\endgroup\$ – Stephane Hockenhull Jan 2 '15 at 16:33
  • \$\begingroup\$ draw a bezier curve \$\endgroup\$ – user3689 Jan 3 '15 at 9:20
3
\$\begingroup\$

To draw a bezier curve using OpenGL or Direct3D you need to sub-divide the bezier into line segments. If you do this with enough sub-divisions it will look like a smooth curve.

Interpolation functions:

vec2 Lerp(vec2 a, vec2 b, float i) {
    return a + (b - a) * i;
}

vec2 Bezier4(vec2 a, vec2 b, vec2 c, vec2 d, float i) {
    return Lerp(Lerp(a, b, i), Lerp(c, d, i), i);
}

Then you generate a series of points on the bezier curve and draw connected lines between them:

vec2 bezier[4] = { bezier control points };

int resolution = 8;
vec2 points[resolution];

for(int n=0; n < resolution; ++n){
    float i = (float)n / (float)(resolution-1);

    points[n] = Bezier4(bezier[0], bezier[1] bezier[2] bezier[3], i);
}

DrawConnectLines(points, resolution);

You can increase the resolution to make the curve approximation smoother.

\$\endgroup\$

Not the answer you're looking for? Browse other questions tagged or ask your own question.