Se connecter / S'enregistrer
Votre question

probleme opengl 3D

Tags :
  • Opengl
  • C++
  • Programmation
Dernière réponse : dans Programmation
22 Novembre 2011 08:26:26

bonjour
je travaille avec opengl avec visual studion 2010
je travaille en 3D
j'ai crée un carré rouge sur la surface et je veux mettre sur ce carré un triangle jaune mais lorsque j'affiche le triangle ne se colore pas bien avec le jaune : je sais pas pourquoi
voici le code
est ce que vous avez une idée
merci

  1. #include "stdafx.h"
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <time.h>
  5. #include <Windows.h>
  6. #include <GL/glut.h>
  7. /* l'heure systeme
  8.  
  9. SYSTEMTIME Time;
  10.  
  11.   GetLocalTime(&Time);
  12.  
  13.   printf("Nous sommes le : %02d/%02d/%04d.\n",
  14.   Time.wDay, Time.wMonth, Time.wYear);
  15.  
  16.   printf("Et il est : %02dh %02dmn %02ds %03dms.\n",
  17.   Time.wHour, Time.wMinute, Time.wSecond, Time.wMilliseconds);
  18.  
  19. */
  20.  
  21.  
  22. static void key(unsigned char k, int x, int y)
  23. {
  24. switch (k) {
  25. case 27: //Echaper
  26. exit(0);
  27. break;
  28. default:
  29. return;
  30. }
  31. glutPostRedisplay();
  32. }
  33. void drawTriangle (GLfloat x1, GLfloat y1, GLfloat x2,
  34. GLfloat y2, GLfloat x3, GLfloat y3, GLfloat z)
  35. {
  36. glBegin (GL_TRIANGLES);
  37. glVertex3f (x1, y1, z);
  38. glVertex3f (x2, y2, z);
  39. glVertex3f (x3, y3, z);
  40. glEnd ();
  41. }
  42. void Dessiner()
  43. {
  44. glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
  45.  
  46. glMatrixMode( GL_MODELVIEW );
  47. glLoadIdentity( );
  48.  
  49. gluLookAt(5.5,6.5,3,0,0,0,0,0,1);
  50.  
  51.  
  52. glColor3ub(255,0,0);
  53. glBegin(GL_QUADS);
  54. glVertex3d(6,-6,0);
  55. glVertex3d(-6,-6,0);
  56. glVertex3d(-6,6,0);
  57. glVertex3d(6,6,0);
  58. glEnd();
  59.  
  60. glColor3f(0,1,0);
  61. drawTriangle(1.6,1.6,7,1.6,1.6,7,0);
  62.  
  63. glColor3f(0,1,0);
  64. drawTriangle(-1.6,1.6,-7,1.6,-1.6,7,0);
  65.  
  66. // les axes
  67. glColor3ub(255,0,255);
  68. glBegin(GL_LINES);
  69. glVertex3d(1,0,0);
  70. glVertex3d(0,0,0);
  71. glEnd();
  72. //
  73. glColor3ub(0,255,0);
  74. glBegin(GL_LINES);
  75. glVertex3d(0,1,0);
  76. glVertex3d(0,0,0);
  77. glEnd();
  78. //
  79. glColor3ub(0,255,255);
  80. glBegin(GL_LINES);
  81. glVertex3d(0,0,1);
  82. glVertex3d(0,0,0);
  83. glEnd();
  84.  
  85. glFlush();
  86.  
  87. }
  88. int main(int argc, char** argv)
  89. {
  90.  
  91. glutInit(&argc, argv);
  92. //glutInitDisplayMode( GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH );
  93. glutInitWindowSize(800,500);
  94. glutInitWindowPosition(50,50);
  95.  
  96. glutCreateWindow("fenetre OpenGl");
  97.  
  98. glMatrixMode( GL_PROJECTION );
  99. glLoadIdentity();
  100. gluPerspective(40,(double)640/480,1,100);
  101. glEnable(GL_DEPTH_TEST);
  102.  
  103. glutDisplayFunc(Dessiner);
  104.  
  105.  
  106.  
  107. //Dessiner();
  108. glutKeyboardFunc(key);
  109. glutMainLoop();
  110. return 0;
  111. }

Autres pages sur : probleme opengl

a b L Programmation
22 Novembre 2011 20:04:22

C'est parce que, justement, tu le mets au même endroit. Lors de la projection de ta scène, tes 2 plans on exactement la même profondeur, donc lequel afficher ? ;) 

Dans la pratique, si tu fais tourner les objets, l'approximation des calculs de projection (dans le viewport) peut être différente, et donc tu peux voir une partie de l'objet ou le passage de l'un passant devant l'autre lors de l'animation.

Bref, pour résoudre ton problème, tu as 2 possibilités:
- soit tu avances légèrement ton triangle pour qu'il soit toujours devant
- soit tu fait un trou dans ton rectangle (et donc le décomposer en triangles)
La première solution est la moins couteuse. Si tu veux faire les 2 faces, fait un volume.
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS