Bonjour je voudrais pouvoir dessiner une croix dans l'espace (x,y,z) qui soit toujours de la même taille à l'écran (que ma caméra recule ou pas) et ne tourne pas (un peu comme les textes 2D dans un espace 3D)
Bonjour je voudrais pouvoir dessiner une croix dans l'espace (x,y,z) qui soit toujours de la même taille à l'écran (que ma caméra recule ou pas) et ne tourne pas (un peu comme les textes 2D dans un espace 3D)
il suffit de faire comme pour les text 2d : tu passe en mode orthogonal et tu dessine ta croix en 2D
* Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
* pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
Mes articles
??? là, moi pas comprendre...
quand je marquais texte 2D c'etait en exemple de fonction (visuellement) mais j'ai pas dit que je savais le faire![]()
dans ta fonction paint/display tu change de projection le temps de dessiner tes informations
exemple rapide
Vala le code est pas garanti j'ai pas de compiler sous la main et je fais souvent des étourderis dont GL_VIEWMODEL et GL_MODELVIEW que je ne retiens jamais.
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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 /*Fonction qui affiche la scène*/ void display () { glMatrixMode(GL_VIEWMODEL); glLoadIdentity(); /*Tu dessines ta scène comme tu le sens*/ /*Tu sauvegardes ta matrice de modélisation*/ glPushMatrix(); /*Tu passes sur la matrice de projection pour te mettre en mode 2D pour afficher du texte, des boite de dialoges, etc*/ glMatrixMode(GL_PROJECTION); /*Tu sauvegardes d'abord ta projection actuelle*/ glPushMatrix(); /*Tu fais un projection 2D*/ glLoadIdentity(); glOrtho(0.0,EcranLargeur,0.0,EcranHauteur); /*Tu te mets dans la matrice VIEWMODEL pour afficher tes infos*/ glMatrixMode(GL_VIEWMODEL); glLoadIdentity(); /*Tu affiche tes informations glVertex2D/glBitmap*/ /*Et si jamais tu veux afficher encore des trucs sur la scène en glPerspective*/ /*Tu te remets en mode projection ...*/ glMatrixMode(GL_PROJECTION); /*...et tu récupère la matrice perspective telle qu'elle était avant*/ glPopMatrix(); /*Tu te remet en mode viewmodel ...*/ glMatrixMode(GL_VIEWMODEL); /*...et tu récupère la matrice viewmodel telle qu'elle était avant*/ glPopMatrix(); }
Pour les questions éventuelles je ne repasse pas avant un moment désolé.
Ensuite il faudra bien utiliser une fonction pour transformer un vecteur 2D - 3D et vice-versa qui aidera à placer ce qui est ortho vers 3D et inversement.
Il y a gluProject() et gluUnproject() pour cela.
edit: Et aussi la dernière façon, si besoin est, que ce sois spécialement un objet 3D mais toujours de même taille: calculer la distance entre la caméra et le dit objet, ensuite appliquer cette distance à l'objet, bien sûr en la divisant pour avoir la bonne taille.
Utile pour un déplaceur d'objets qui indique les axes, dans un logiciel de modélisation par exemple.
Toujours avec les mêmes fonctions de transformation 2D – 3D.
* Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
* pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
Mes articles
Faut pas comprendre de coté, je disais d'utiliser gluProject/UnProject quand on dois afficher un objet ortho à la même position d'un objet 3D, vu que ce dernier changeait de taille suivant la position de la caméra.![]()
* Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
* pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
Mes articles
non je veux pas qu'elle reste au milieu de l'écran.. je veux que son centre ne change pas de coordonnées dans l'espace et que la croix soit toujours visible à l'écran peut importe ou se trouve la caméra.
* Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
* pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
Mes articles
oui bien sur... j'aurais du préciser.. du moment qu'elle reste dans le champ de vision de la caméra... alors je cherche a ce que l'on voit la croix (et pas un trait si on la regarde de cote)...
si, j'ai bien compris, tu veux avoir une croix en position (x,y,z) (en coordone du monde 3d) que l'on peut voir tout le temps, quelque soit la rotation ou translation effectue sur le system...?? Comme si la croix etait dessiner en 2d mais en suivant les mouvements 3d de la scene.
si, c'est ca, voici un bout de code qui fait exactement ca:
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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 glPushMatrix(); // rotation de la camera - anglex et angley correspondant au mouvement de la souris glRotatef(-anglex,0.0,1.0,0.0); glRotatef(-angley,1.0,0.0,0.0); ...dessine la scene normalement glPopMatrix(); glPushMatrix(); // deplace la croix vers l'avant de facon qu'elle soit toujours // place devant tous les autres objects de la scene glTranslatef(0,0,1); // rotation de la camera - anglex et angley correspondant au mouvement de la souris glRotatef(-anglex,0.0,1.0,0.0); glRotatef(-angley,1.0,0.0,0.0); glPushMatrix(); //deplace la croix a son emplancement 3d (x,y,z) glTranslatef(x,y,z); // rotation inverse a celle de la camera glRotatef(anglex,0.0,1.0,0.0); glRotatef(angley,1.0,0.0,0.0); // dessine la croix avec glBegin(GL_LINES) par example dessine_croix(); glPopMatrix(); glPopMatrix();
ouais.. je vais regarder comment détourner ça... car je fait aucune translation ni rotation dans mon monde 3D je n'utilise que gluLookAt en déplacant la caméra et le point de référence a des endroit précis.
je crois comprendre que tu veux une croix plane toujours visible de face
et en plus tu veux qu'elle fasse la même taille à l'écran qu'elle soit proche ou loin de la caméra ?
pour qu'elle soit toujours visible de face, regardes du côté des billboard
pour qu'elle ne change pas de taille, il te suffit de ne pas prendre en compte la distance
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.
Partager