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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de kitsune
    Inscrit en
    Décembre 2004
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2004
    Messages : 341
    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 : 46
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    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 ?
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

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

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 594
    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
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  4. #4
    Membre Expert
    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 : 46
    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
    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 Expert

    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
    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

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 341
    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 !

+ 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