2010-04-24 24 views
0

J'essaie de tirer ordre élevé de Bézier Curve utilisant les évaluateurs OpenGL:OpenGL: Comment dessiner Bezier courbe de degré supérieur à 8?

glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 30, &points[0][0]); 

glMapGrid1f(30, 0, 1); 
glEvalMesh1(GL_LINE, 0, 30); 

ou

glBegin(GL_LINE_STRIP); 
for (int i = 0; i <= 30; i++) 
    glEvalCoord1f((GLfloat) i/30.0); 
glEnd(); 

Lorsque nombre de points dépasse 8, la courbe disparaît. Comment dessiner une courbe de Bézier d'ordre supérieur en utilisant des évaluateurs?

+1

Votre meilleur pari est probablement tirer une section à la fois et la courbe approximative. –

+1

Il est donc interdit par OpenGL de dessiner une courbe de degré élevé? – maciekp

Répondre

0

Y a-t-il une erreur GL_MAX_EVAL_ORDER par hasard? Les courbes de Bézier deviennent instables à des degrés élevés. Je ne serais pas surpris si votre implémentation OpenGL venait d'abandonner.

Vous pouvez utiliser glGet avec GL_MAX_EVAL_ORDER pour voir à quoi correspond votre implémentation. Si vous avez besoin de quelque chose de plus élevé, vous pouvez toujours rouler le vôtre, ce qui n'est pas si mal.

1

Voir le document:

Watkins et Worsey, Degree reduction of Bézier curves. conception assistée par ordinateur. 20 (7), septembre 1988, 398-405.

Ce qu'ils font est de convertir la courbe Bézier en forme polynomiale Chebyshev, de sorte que le dernier terme du polynôme a le moins d'effet sur la forme, laissez tomber le dernier terme, et reconvertir en forme Bézier. Si cela produit trop d'erreur, le Bézier est subdivisé et le processus est à nouveau exécuté.

Cela rend très facile de convertir la courbe haute pour descendre à un cube de Bézier le système peut rendre nativement efficacement. J'ai utilisé cette méthode pour deux situations différentes, et cela fonctionne bien. Une mise en garde cependant; les équations matricielles dans le papier ont quelques fautes de frappe. Voir:

Peterson, J., Letter to the Editor, CAD, 23 (6), Août 1991, p.460

pour les équations corrigées. Malheureusement CAD est une revue universitaire de la vieille école, et donc les papiers ne sont pas facilement en ligne. Vous aurez besoin de les sortir d'un endroit de la bibliothèque, ou payer l'amende pour les obtenir d'Elsevier.