Accueil > Forum > > > > Pavé tournant
Pavé tournant
mardi 14 février 2006 à 10:50:54 |
Pavé tournant

nisaloncaje
|
Bonjour, je désirais pour commencer en OpenGL sous devc++ faire un programme simulant un pavé tournant autour de l'axe y : voici mon code source :
#include <GL/glut.h> #include <stdlib.h> /* Notre structure point */ int i,j; typedef struct { float x; float y; float z; float r; float g; float b; } point; point p[8]={ {-0.3,-0.15, 0.3,1.0,0.0,0.0}, {-0.3, 0.15, 0.3,0.0,1.0,0.0}, { 0.3, 0.15, 0.3,0.0,0.0,1.0}, { 0.3,-0.15, 0.3,1.0,1.0,0.0}, {-0.3,-0.15,-0.3,1.0,0.0,1.0}, {-0.3, 0.15,-0.3,0.0,1.0,1.0}, { 0.3, 0.15,-0.3,0.0,0.0,0.0}, { 0.3,-0.15,-0.3,1.0,1.0,1.0}}; int f[6][4]={ {0,1,2,3}, {3,2,6,7}, {4,5,6,7}, {0,1,5,4}, {1,5,6,2}, {0,4,7,3}}; float a=0; float inca=0.45; /* Prototype des fonctions */ void affichage(); void clavier(unsigned char touche,int x,int y); void reshape(int x,int y); void idle(); int main(int argc,char **argv) { /* initialisation de glut et creation de la fenetre */ glutInit(&argc,argv); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); glutInitWindowPosition(200,200); glutInitWindowSize(500,500); glutCreateWindow("transf"); /* Initialisation d'OpenGL */ glClearColor(1.0,1.0,1.0,0.0); glColor3f(1.0,1.0,1.0); glPointSize(2.0); glEnable(GL_DEPTH_TEST); /* enregistrement des fonctions de rappel */ glutDisplayFunc(affichage); glutKeyboardFunc(clavier); glutReshapeFunc(reshape); glutIdleFunc(idle); /* Entree dans la boucle principale glut */ glutMainLoop(); return 0; } void affichage() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glRotatef(a,0.0,1.0,0.0); glRotatef(10,1.0,0.0,0.0); /* Dessin du cube */ for (i=0;i<6;i++) { glBegin(GL_POLYGON); for (j=0;j<4;j++) { glColor3f(p[f[i][j]].r,p[f[i][j]].g,p[f[i][j]].b); glVertex3f(p[f[i][j]].x,p[f[i][j]].y,p[f[i][j]].z); } glEnd(); } glFlush(); glutSwapBuffers(); } void clavier(unsigned char touche,int x,int y) { switch (touche) { case 'a': inca++; if (inca>10) inca=10; glutPostRedisplay(); break; case 'A': inca--; if (inca<-10) inca=-10; glutPostRedisplay(); break; case 'q' : exit(0); } } void reshape(int x,int y) { if (x<y) glViewport(0,(y-x)/2,x,x); else glViewport((x-y)/2,0,y,y); } void idle() { a+=inca; if (a>360) a-=360; glutPostRedisplay(); }
Le programme marche et simule ce que je veux, le seul petit problème est le fait que quand on a une face de face :) et bien on a l'impression que l'image saute. Cet effet se fait-il aussi chez vous, et si oui, comment l'éviter ?
Merci d'avance
NC
|
|
mardi 14 février 2006 à 12:12:08 |
Re : Pavé tournant

platon179
|
Salut  Je viens de tester ton programme sous dev-cpp, aucun souci apparemment, le cube tourne bien comme il faut, et je n'ai pas l'impression que l'image "saute"... En rajoutant une temporisation dans la fonction idle, c'est bien visible, il n'y aucun souci, le code est correct  Peut-être des drivers graphiques a mettre à jour ?  Bonne journée @+
|
|
mardi 14 février 2006 à 16:07:53 |
Re : Pavé tournant

nisaloncaje
|
merci. pourtant mes drivers sont à jour mais en fait j'ai l'impression que ca saute quand le pavé est de profil et donc au moment ou on ne voit plus qu'une seule face, entre ce moment là et celui où les autres faces réapparaissent. Ce n'est pas grave, mais sinon sauriez vous comment faire pour teinter chaque face du pavé d'une couleur différente (car là je débute et je n'arrive qu'à faire des 'dégradés'), et si c'est possible 'd'écrire un texte' sur une des faces du pavé ?
|
|
mardi 14 février 2006 à 16:15:53 |
Re : Pavé tournant

platon179
|
Re :)
Pour qu'une face ait une couleur unique, tu dois donner la même couleur à tous les coins de cette face, sinon OpenGL réalise une interpolation entre les couleurs, comme tu peux t'en rendre compte toi-même...
Sinon, pour afficher du texte sur une face, tu peux créer une texture qui contient le texte, et l'utiliser pour la mapper sur une des faces...Pour un très bon tuto sur les textures : http://nehe.gamedev.net. C'est a mon avis la solution la plus simple...
Bonne journée @+
|
|
mardi 14 février 2006 à 19:42:41 |
Re : Pavé tournant

nisaloncaje
|
d'accord pour le texte, mais deux petites questions encore : comment faire un texte en 3d ? et si je mets la meme couleur aux 4 points d'une face, par exemple rouge, alors une autre face ayant une arete commune avec cette face aura 2 points de la couleur de la 1ère face, meme si je veux la faire d'une autre couleur (bleue par exemple) ! d'où la question : comment résoudre le problème ? :-)
|
|
mardi 14 février 2006 à 19:51:22 |
Re : Pavé tournant

platon179
|
Salut... :)
Pour le texte en 3D sous Windows, encore retour sur le site de Nehe, tout y est expliqué dans la liste de tutos à gauche....
En ce qui concerne la couleur des faces, le probleme ne se pose meme pas en réalité. Tu dois en effet toujours fournir tous les points d'une face... Si on prend l'exemple d'affichage de quadrilateres, tu definis quatre points d'une couleur :
glBegin(GL_QUADS); glColor3f(1.0f, 0.0f, 0.0f); // Couleur rouge glVertex3f(0.0f, 0.0f, 0.0); // Les quatre points qui composent ton quadrilatere glVertex3f(1.0f, 0.0f, 0.0f); glVertex3f(1.0f, 0.0f, 1.0f); glVertex3f(0.0f, 0.0f, 1.0f);
Ca c'est ta premiere face de couleur rouge ok ? Donc pour la face suivante, tu definis quatre autres points d'une couleur quelconque, même si plusieurs points sont confondus, c'est pas grave, c'est comme ca que ca fonctionne, par exemple :
glColor3f(0.0f, 1.0f, 0.0f); // Couleur verte glVertex3f(1.0f, 0.0f, 0.0); // Les quatre points qui composent ton quadrilatere... glVertex3f(2.0f, 0.0f, 0.0f); glVertex3f(2.0f, 0.0f, 1.0f); glVertex3f(1.0f, 0.0f, 1.0f); glEnd();
Dans le petit exemple d'au-dessus, tu auras un carré rouge, avec un carré vert à sa droite, avec deux points confondus entre les deux quadrilateres... Note que tu es pas obligé de mettre un couple glEnd() / glBegin(quelque_chose) pour changer de couleur...
Bonne soirée @+
|
|
mardi 14 février 2006 à 22:12:26 |
Re : Pavé tournant

nisaloncaje
|
ok c'est tout simple en fait, mais j'avais trouvé aussi (pour conserver ma structure de faire ainsi : glShadeModel(GL_FLAT), et de triturer un peu le début du code ou je mettais maintenant : int f[6][4]={ {0,1,2,3}, {3,2,6,7}, {4,5,6,7}, {5,4,0,1}, {1,5,6,2}, {7,3,0,4}};
est-ce exactement le meme effet, ou l'un des 2 scripts est plus performant que l'autre ?
|
|
mardi 14 février 2006 à 22:17:24 |
Re : Pavé tournant

platon179
|
Réponse acceptée !
Salut :)
Normalement, si tu utilises GL_FLAT au lieu de GL_SMOOTH, ca sera légèrement plus rapide, mais le gain sera tellement minime que ca vaut pas le coup... Surtout que tu envoies exactement le même nombre de points a OpenGL avec les deux méthodes... Si tu as encore des questions, ici ou sur MSN (c'est peut-être plus simple en direct :p) : platonman1758@hotmail.com
Voilà, @+
|
|
Cette discussion est classée dans : int, void, glut, float, inca
Répondre à ce message
Sujets en rapport avec ce message
équation et tableaux [ par cabarrus ]
je ne trouve pas l'erreur dans mon programme?#include#includeint deltanul(int);float deltainf(float);float deltasup(float);void main(void){float a,b,c
pb de Z-buffer ac openGL -> Help! [ par Arnaud16022 ]
bonjour tt le monde!quelqun pourrait me dire pourqoui le Z-buffer marche pas?pasque le dernier (4ème) triangle dessiné apparait tjs au dessus, meme s'
opengl.glut : gestion clavier [ par _Jonathan ]
salut a tousvoila, j'arrive pas a utiliser la fonction glutSpecialUpFunc (chui sous devc++).glutSpecialFunc marche.Si kelkun pourrai m'expliker : ----
le mode graphique sur dos [ par alen ]
alb#include#include#include#include#includeint xgclot,xdclot,yh
Errreur [ par RM50Man ]
Mon code ne marche pas: Le compilateur devcpp me met build error 1 #include /* contient déjà et */ #include #include #include void reset
Problème avec les polygones [ par nisaloncaje ]
Bonjour, j'ai le code source suivant : #include #include double a=0,inca=0.1; /* Prototype des fonctions */void affichage();void clavier(unsigned
Problème de tabeau dans un code orienté objet [ par Guiiil ]
Bonsoir, je débute actuellement en C++ orienté objet et je suis bloqué avec ce programme qui doit réaliser un tableau d'élèves, prendre leur moyenne e
map [ par taieb84 ]
salut j'ai une classe caisse class caisse{ float val; int nbr; public: bool exist(float); void ajouter(floa
classe abstraite et interface (au sens Java pas graphique :d ) en C++ [ par lulafitt ]
Bonjour, Comme précisé dans le sujet quand je parle d'interface je ne parle pas d'interface graphique mais bien d'interface comme dans Java. Ceci dit
error LNK2001: unresolved external symbol _WinMainCRTStartup [ par CrKa ]
slt,j'ai cette erreur dans mon programme en VC++ erreur 1>------ Rebuild All started: Project: test4, Configuration: Debug Win32 ------ 1>LINK : erro
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|