Picking opengl(glut) / interpolation bézier,b-spline,catmulrom

Soyez le premier à donner votre avis sur cette source.

Vue 18 655 fois - Téléchargée 2 310 fois

Description

Voici un programme initialement destiné à comprendre le fonctionnement du Picking standard d'openGL, car ce n'est pas une tâche facile, meme avec le "red-book" à coté de soi. J'ai essayé de respecter la façon dont les logiciels aujourd'hui utilise la sélection. C'est à dire:
- Cliquer sur un point pour le sélectionner et maintenir cliqué pour le déplacer
- Maintenir shift appuyé pour enlever ou ajouter un point à une sélection.
- Maintenir cliqué pour faire une sélection par glissement.
- Appuyer sur shift et maintenir cliqué, pour ajouter une sélection par glissement à une sélection deja existante.
- Cliquer sur un point puis le déplacer provoque le déplacement de toute la sélection.
- Maintenir ctrl appuyé puis cliquer n'importe ou et maintenir cliqué, pour déplacer l'ensemble de la sélection.

Ce programme montre également 3 méthodes d'approximation et d'interpolation. Ce sont des méthodes pour obtenir des courbes définies mathématiquement à partir d'un nuage de points:
- Courbe de Bézier (approximation)
- Courbe B-spline uniforme (approximation)
- Courbe Catmul-rom (interpolation)

Normalement, le programme se compile sous linux ou windows. J'utilise Glut pour gérer la fenetre. J'ai essayé de commenter abondamment la partie du programme qui concerne le picking openGL.

Sous linux, je compile avec la commande suivante:
g++ curve.cpp -o curve -L/usr/X11R6/lib -lX11 -lGL -lglut -lGLU

PS: le curseur n'apparait pas sur la screen.
La screen montre une courbe B-spline avec un point triple (reconnaissable).

Conclusion :


Le menu est accessible par le bouton droit de la souris.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

nahiene
Messages postés
3
Date d'inscription
vendredi 18 avril 2008
Statut
Membre
Dernière intervention
8 décembre 2008

J'ai converti ce code en c++ vers le python. Ça permet plus de lisibilité et de mettre en valeur les différences dans l'opengl entre python et c++:

http://www.pythonfrance.com/codes/PICKING-OPENGL-GLUT-INTERPOLATION-BEZIER-SPLINE-CATMULROM-VERSION_48634.aspx
sajaris
Messages postés
63
Date d'inscription
jeudi 7 août 2003
Statut
Membre
Dernière intervention
1 août 2008

je trouve le code bien mais assez complexe pour moi. j'aimerais te demander un code simple si possible pour le picking et le deplacement d'un quad, un code tres simple. j'ai deja dessiner mon quad, mais les tutos que je trouve ca et la sont assez complexe pour moi, lorsque j'essai ca marche pas vraiment. alors merci de m'aider en aide.
luhtor
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
L'algorithme de Casteljau me semblait obscure, j'avais pas envie de compliquer inutilement.
monsieur_matou
Messages postés
1
Date d'inscription
mercredi 31 août 2005
Statut
Membre
Dernière intervention
31 août 2005

hello,

bravo et merci pour ton fichier. C'est propre et agréable à lire, je vais tout de suite essayer de m'en servir pour inférer une implémentation pour des patchs triangulaires en dimension 3...

Oh, une question tout de meme : pourquoi avoir pris la formule analytique de bernstein pour la construction des beziers plutot que l'algo incrémental de De Casteljau ?
luhtor
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Car les pondérations sont différentes. Bézier utilise les polynomes de Berstein, alors que Catmulrom n'utilise meme pas le principe de barycentre.
La technique de construction est différente, donc forcément, les courbes sont différentes.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.