[OpenGL] Problèmes avec les faces d'une pyramide

Problèmes avec les faces d'une pyramide [OpenGL] - Programmation

Marsh Posté le 09-03-2001 à 15:49:02    

Aucune des faces de la pyramide ne s'affiche correctement, quel est le problème?
 
Voilà le code:
 
#include <windows.h>
#include <gl/glut.h>
 
///////////////////////////////////////////////////////////////////
 
double rtri;
double rbase;
 
///////////////////////////////////////////////////////////////////
 
void init (GLvoid)
{
 
  glShadeModel (GL_SMOOTH);
 glClearColor (0.0, 0.0, 0.0, 0.0);
 glClearDepth (1.0);
 glEnable (GL_DEPTH_TEST);
 glDepthFunc (GL_LEQUAL);
 glEnable (GL_COLOR_MATERIAL);
 glHint (GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
}
 
///////////////////////////////////////////////////////////////////
 
void display (void)
{
 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 
 glLoadIdentity();
 
 glTranslatef( 0.0, 0.0,-5.0);
 
 glRotatef(rtri, 0.0, 1.0, 0.0);
 rtri-=0.5;
 glBegin(GL_TRIANGLES);
  glColor3f ( 1.0, 0.0, 0.0);  // Rouge
  glVertex3f( 0.0, 1.0, 0.0);  // Top Of Triangle (Front)
  glVertex3f(-1.0,-1.0, 1.0);  // Left Of Triangle (Front)
  glVertex3f( 1.0,-1.0, 1.0);  // Right Of Triangle (Front)
   
 
  glColor3f ( 0.0, 1.0, 0.0);  // Vert
  glVertex3f( 0.0, 1.0, 0.0);  // Top Of Triangle (Right)
  glVertex3f( 1.0,-1.0, 1.0);  // Left Of Triangle (Right)
  glVertex3f( 1.0,-1.0,-1.0);  // Right Of Triangle (Right)
 
  glColor3f ( 0.0, 0.0, 1.0);  // Bleu
  glVertex3f( 0.0, 1.0, 0.0);  // Top Of Triangle (Back)
  glVertex3f( 1.0,-1.0,-1.0);  // Left Of Triangle (Back)
  glVertex3f(-1.0,-1.0,-1.0);  // Right Of Triangle (Back)
 
  glColor3f ( 0.5, 0.5, 0.5);  // Gris
  glVertex3f( 0.0, 1.0, 0.0);  // Top Of Triangle (Left)
  glVertex3f(-1.0,-1.0,-1.0);  // Left Of Triangle (Left)
  glVertex3f(-1.0,-1.0, 1.0);  // Right Of Triangle (Left)
 glEnd();
 
 glLoadIdentity();
 
 glTranslatef( 0.0, 0.0,-5.0);
 
 glRotatef(rbase, 0.0, 1.0, 0.0);
 rbase-=0.5;
 glBegin(GL_QUADS);
  glColor3d ( 0.2, 0.3, 0.5);
  glVertex3f(-1.0,-1.0, 1.0);
  glVertex3f(-1.0,-1.0,-1.0);
  glVertex3f( 1.0,-1.0,-1.0);
  glVertex3f( 1.0,-1.0, 1.0);
 glEnd();
   
 glutSwapBuffers ();
}
 
///////////////////////////////////////////////////////////////////
 
void reshape (int w, int h)
{
 glViewport (0, 0, w, h);
 glMatrixMode (GL_PROJECTION);
 glLoadIdentity ();
 
 if (h==0)
  gluPerspective (80,(float) w, 1.0, 5000.0);
 
 else
  gluPerspective (80,(float)w/(float) h, 1.0, 5000.0);
 
 glMatrixMode (GL_MODELVIEW);
 glLoadIdentity ();
}
 
///////////////////////////////////////////////////////////////////
 
void main (int argc, char** argv)
{
  glutInit (&argc, argv);
  init ();
  glutInitDisplayMode (GLUT_RGB | GLUT_DOUBLE);
  glutInitWindowSize (640, 480);
  glutCreateWindow ("Newbie's Project" );
  //glutFullScreen ();
  glutDisplayFunc (display);
  glutIdleFunc (display);
  glutReshapeFunc (reshape);
  glutMainLoop ();
}
 
///////////////////////////////////////////////////////////////////

Reply

Marsh Posté le 09-03-2001 à 15:49:02   

Reply

Marsh Posté le 09-03-2001 à 16:20:51    

Ton cube s'affiche-t-il bien lui par contre ?
 
A++

Reply

Marsh Posté le 09-03-2001 à 16:24:45    

Oui il marche bien.

Reply

Marsh Posté le 09-03-2001 à 16:46:05    

Je viens de compiler le prog chez moi, et j'ai une très belle pyramide qui tourne !!!!
Qu'est-ce que tu vois exactement ??
De plus, fait attention à l'ordre des vertex pour que la transparence des facettes soit bonne (cad transparentes de dos ou non, etc...)
 
A++

Reply

Marsh Posté le 09-03-2001 à 17:20:03    

Bon deja dans le glutInitDisplayMode il faut ajouter GLUT_DEPTH
et tu deplace init() après la création de la fenetre (car c'est la qu'opengl est instancié, pas d'appel glXXX avant!)

 

[edit]--Message édité par MC--[/edit]

Reply

Marsh Posté le 09-03-2001 à 20:29:57    

Merci MC, ça a résout mon problème. Ca marche très bien maintenant.
:)
 
Un grand merci à tous pour votre aide!!!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed