IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

Recuperer coordonnees courbe de Bezier


Sujet :

OpenGL

  1. #1
    Membre régulier Avatar de kitsune
    Inscrit en
    Décembre 2004
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2004
    Messages : 341
    Points : 112
    Points
    112
    Par défaut Recuperer coordonnees courbe de Bezier
    Bonjour,

    Je me bats actuellement avec des courbes de Bezier et j'ai recupere le code suivant pour les dessiner.
    Ce qui m'interesse maintenant, c'est de pouvoir recuperer une certaine quantite de points de la courbe.
    Je ne vois pas comment recuperer les coordonnees de ces points de la courbes, meme si j'ai compris que c'est glEvalCoord1f((GLfloat) i/30.0); qui les calcule...

    Merci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
                            glShadeModel(GL_FLAT);
    			glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &ctrlpoints[0][0]);
    			glEnable(GL_MAP1_VERTEX_3);
     
    			glBegin(GL_LINE_STRIP);
    			for (int i = 0; i <= 30; i++) 
    				glEvalCoord1f((GLfloat) i/30.0);
    			glEnd();
    			// The following code displays the control points as dots.
    			glPointSize(5.0);
    			glColor3f(1.0, 1.0, 0.0);
    			glBegin(GL_POINTS);
    			for (int i = 0; i < 4; i++) 
    				glVertex3fv(&ctrlpoints[i][0]);
    			glEnd();

  2. #2
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Bonjour,

    je ne sais pas ce qu'est sencé exactement faire ce petit morceau de code, mais en tout cas il ne te calculera jamais une Bezier.

    Si tu veux calculer un nombre de points fixe et ensuite déssiner une courbe de Bézier, il te faut utiliser l'algorithme de De Casteljau. C'est un algorithme géométrique très facile à mettre en place.
    Bézier est absolument inutilisable sous sa forme brute à cause de l'utilisation du polynome de Bernstein.

    PS : c'était pas une question un peu plus algo que OpenGL ?

  3. #3
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 539
    Points : 5 227
    Points
    5 227
    Par défaut
    si tu veux récupérer des points, tu ne peux aps te servir de glEvalCoord à ma connaissance
    La solution de ToTo13 devrait te permettre de faire ce que tu veux

  4. #4
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Oui glEvalCoord n'est pas fait pour calculer une courbe, mais juste là, pour la représenter graphiquement. Et elle dessine bien une courbe de Bézier

    Exemple

    Il faut effectuer le calcul manuellement, cela serait plus simple.

    Sinon fouiller du côté de glFeedbackBuffer, peut être qu'il y a moyen de récupérer les informations.

  5. #5
    Membre expérimenté

    Profil pro
    Programmeur
    Inscrit en
    Août 2002
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Août 2002
    Messages : 1 091
    Points : 1 679
    Points
    1 679
    Par défaut
    L'algorithme de Casteljau est utile si tu traces la courbe sur un bout de papier, un peu moins pour l'évaluer sur un ordinateur (qui est une super calculette.. façon de parler).

    Pour un point unique, l'évaluation est super simple, à partir des points de controle, en utilisant les polynomes de Bernstein tu peux utiliser les formules listées dans mon article :
    Bezier curves and surfaces, Bernstein polynoms

    Si tu veux générer plusieurs points avec un niveau de subdivision fixe (genre un à 0.0, le deuxième à 0.1, troisième à 0.2 etc..), tu calcules les poids à appliquer à chaque point de controle, là encore en utilisant les polynomes de Bernstein donné dans l'article ci dessus, et tu les stockes quelque part (dans un tableau/matrice). Et tu appliques ces poids pour chaque point que tu veux recalculer rapidement (pratique si tu as des niveaux de subdivision fixe genre puissance de deux, moins si ces niveaux changent aléatoirement et peuvent prendre n'importe quelle valeur).

    LeGreg

  6. #6
    Membre régulier Avatar de kitsune
    Inscrit en
    Décembre 2004
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2004
    Messages : 341
    Points : 112
    Points
    112
    Par défaut
    Non ce n'est pas ma question, j'ai reussit a tracer la courbe de Bezier grace au tableau ctrlpoints dans lequel je renseigne des coordonnees.
    Ce que je voudrai maintenant c'est pouvoir recuperer les points qui ont ete calcules pour la tracer... Je sais pas si c'est comprehensible mais je n'ai renseigne que le point de depart et le point d'arrivee de la courbe ainsi que les 2 points de controle de la courbe et mon bout de code fait le reste pour dessiner la courbe.
    J'aimerai juste pouvoir recuperer un certains nombres de points de la courbe et je ne sais pas comment.

    Mais peut-etre qu'effectivement je dois changer de methode ^^

    Merci !

  7. #7
    Membre régulier Avatar de kitsune
    Inscrit en
    Décembre 2004
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2004
    Messages : 341
    Points : 112
    Points
    112
    Par défaut
    Si j'ai bien compris, moi j'utilise des sortes d'evaluateurs mais il faudrait que j'implemente l'algo pour pouvoir recuperer mes points ?

  8. #8
    Membre régulier Avatar de kitsune
    Inscrit en
    Décembre 2004
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2004
    Messages : 341
    Points : 112
    Points
    112
    Par défaut
    C'est bon, j'ai tout simplement implemente la fonction de Bezier comme recommande en calculant les coefficients polynomiaux.
    Ton article est bien fait LeGreg merci !

    Et un petit exemple de code aussi : http://en.wikipedia.org/wiki/B%C3%A9zier_curve

    Merci pour vos reponses.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fermer une courbe de Bezier
    Par cjacquel dans le forum MFC
    Réponses: 2
    Dernier message: 15/05/2007, 13h21
  2. recuperer coordonnees et taille d'un div
    Par calitom dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 21/03/2007, 14h21
  3. courbe de bezier
    Par widi70 dans le forum C++
    Réponses: 12
    Dernier message: 17/03/2007, 13h52
  4. [vecteurs] dessiner les courbes de Bezier
    Par luta dans le forum Flash
    Réponses: 4
    Dernier message: 03/07/2006, 10h58
  5. Courbes de Beziers
    Par venomelektro dans le forum OpenGL
    Réponses: 10
    Dernier message: 23/12/2004, 01h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo