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");
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 ?
platon179
Messages postés237Date d'inscriptionlundi 20 mai 2002StatutMembreDernière intervention22 juillet 20112 14 févr. 2006 à 22:17
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
platon179
Messages postés237Date d'inscriptionlundi 20 mai 2002StatutMembreDernière intervention22 juillet 20112 14 févr. 2006 à 12:12
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 ?
nisaloncaje
Messages postés154Date d'inscriptionsamedi 7 janvier 2006StatutMembreDernière intervention28 septembre 2008 14 févr. 2006 à 16:07
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é ?
platon179
Messages postés237Date d'inscriptionlundi 20 mai 2002StatutMembreDernière intervention22 juillet 20112 14 févr. 2006 à 16:15
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 @+
Vous n’avez pas trouvé la réponse que vous recherchez ?
nisaloncaje
Messages postés154Date d'inscriptionsamedi 7 janvier 2006StatutMembreDernière intervention28 septembre 2008 14 févr. 2006 à 19:42
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 ? :-)
platon179
Messages postés237Date d'inscriptionlundi 20 mai 2002StatutMembreDernière intervention22 juillet 20112 14 févr. 2006 à 19:51
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...
nisaloncaje
Messages postés154Date d'inscriptionsamedi 7 janvier 2006StatutMembreDernière intervention28 septembre 2008 14 févr. 2006 à 22:12
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 ?