Probleme openGL et POO sous VC++

Probleme openGL et POO sous VC++ - C++ - Programmation

Marsh Posté le 23-07-2007 à 14:33:05    

Bonjour,
 
 
Bon voilà j'ai un petit soucis, programmant plutôt en java, j'ai décidé de passer au c++, tout se passait plutôt bien jusqu'à ce que je commence à utiliser openGL
 
Donc en fait j'ai suivit un tuto pour apprendre les bases d'openGl jusque là ca va, puis j'ai eu envie de faire un programme un peu plus poussé en utilisant openGL mais là j'ai quelques soucis, à priori c'est à cause de windows.h (que je suis obligé d'inclure car je suis sous Visual studio 2005 et apparemment il est nécessaire de l'inclure lorsque qu'on utilise openGL)
 
 
Je rencontre un problème des que je crée des classes en effet j'ai des erreur du type  
 
f:\projet visual studio 2005\testopengl2\testopengl2\frame.cpp(105) : error C2065: 'r' : identificateur non déclaré
f:\projet visual studio 2005\testopengl2\testopengl2\frame.cpp(105) : error C2061: erreur de syntaxe : identificateur 'Rectangle'
 
alors que j'ai bien inclut rectangle.h dans le frame.h
 
En revanche lorsque je commente la ligne #include <windows.h> je n'ai plus cette erreur et j'arrive à instancier des objets rectangle...
 
La je dois vous avouer que je suis complétement largué...
 
Merci d'avance :)

Reply

Marsh Posté le 23-07-2007 à 14:33:05   

Reply

Marsh Posté le 23-07-2007 à 16:53:11    

the_phoenix2 a écrit :

windows.h (que je suis obligé d'inclure car je suis sous Visual studio 2005 et apparemment il est nécessaire de l'inclure lorsque qu'on utilise openGL)


Euh non, pas si tu utilises sdl
(cf nehe.gamedev.net par exemple).


---------------
Töp of the plöp
Reply

Marsh Posté le 23-07-2007 à 17:10:07    

Bah en fait j'utilise SDL et je suis tout de même obligé d'inclure windows.h (c'est précisé dans le tuto sur le site du zero et c'est seulement avec VC++ apparemment), sans j'ai des erreurs :(

 

J'ai ces erreurs si je n'inclut pas windows.h

 


http://img470.imageshack.us/img470/2226/sanstitrexp5.th.jpg


Message édité par the_phoenix2 le 23-07-2007 à 17:21:15
Reply

Marsh Posté le 23-07-2007 à 17:13:49    

Poste ton code / tes erreurs


---------------
Töp of the plöp
Reply

Marsh Posté le 23-07-2007 à 17:40:57    

Voici les erreurs que j ai :

 
Citation :

------ Début de la génération : Projet : TestOpenGL2, Configuration : Debug Win32 ------
Compilation en cours...
Frame.cpp
f:\projet visual studio 2005\testopengl2\testopengl2\frame.cpp(99) : error C2065: 'r' : identificateur non déclaré
f:\projet visual studio 2005\testopengl2\testopengl2\frame.cpp(99) : error C2061: erreur de syntaxe : identificateur 'Rectangle'
f:\projet visual studio 2005\testopengl2\testopengl2\frame.cpp(100) : error C2227: la partie gauche de '->draw' doit pointer vers un type class/struct/union/générique
        le type est ''unknown-type''
Main.cpp
Génération de code en cours...
Le journal de génération a été enregistré à l'emplacement "file://f:\Projet Visual Studio 2005\TestOpenGL2\TestOpenGL2\Debug\BuildLog.htm"
TestOpenGL2 - 3 erreur(s), 0 avertissement(s)
========== Génération : 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========

  

Rque : Pour la methode void Rectangle:: draw() je suis pas sur que ce que j'ai fait fonctionnera notamment les "glVertex3d(...)" faudrait peut être que je passe le contexte de rendu en parametre, je sais pas trop, openGL c est tout nouveau pour moi ^^
Mais de toute façon "ça merdouille" avant ca ^^

 

Main.cpp

 
Code :
  1. #include "Frame.h"
  2. #include "Rectangle.h"
  3. int main(int argc, char *argv[])
  4. {
  5. Frame *f = new Frame(1024, 768);
  6. return 0;
  7. }
  

Frame.cpp

 
Code :
  1. #include "Frame.h"
  2. Frame::Frame(int l, int h){
  3. this->setLargeur(l);
  4. this->setHauteur(h);
  5. SDL_Event event;
  6. SDL_Init(SDL_INIT_VIDEO);
  7.     atexit(SDL_Quit);
  8.     SDL_WM_SetCaption("SDL GL Application", NULL);
  9.     SDL_SetVideoMode(l, h, 32, SDL_OPENGL);
  10.     glMatrixMode( GL_PROJECTION );
  11.     glLoadIdentity();
  12.     gluPerspective(70,(double)l/h,1,1000);
  13.     glEnable(GL_DEPTH_TEST);
  14.     Dessiner();
  15.     Uint32 last_time = SDL_GetTicks();
  16.     Uint32 current_time,ellapsed_time;
  17.     Uint32 start_time;
  18.     for (;;)
  19.     {
  20.         start_time = SDL_GetTicks();
  21.         while (SDL_PollEvent(&event))
  22.         {
  23.             switch(event.type)
  24.             {
  25.                 case SDL_QUIT:
  26.     exit(0);
  27.     break;
  28.    case SDL_KEYDOWN :
  29.     switch(event.key.keysym.sym)
  30.     {
  31.      case SDLK_UP: // Flèche haut
  32.       break;
  33.      case SDLK_DOWN: // Flèche bas
  34.       break;
  35.     }
  36.   }
  37.         }
  38.         current_time = SDL_GetTicks();
  39.         ellapsed_time = current_time - last_time;
  40.         last_time = current_time;
  41.         Dessiner();
  42.         ellapsed_time = SDL_GetTicks() - start_time;
  43.         if (ellapsed_time < 10)
  44.         {
  45.             SDL_Delay(10 - ellapsed_time);
  46.         }
  47. }
  48. // On quitte la SDL
  49. SDL_Quit();
  50. }
  51. Frame::~Frame(void){
  52. }
  53. int Frame::getLargeur(){
  54. return this->largeur;
  55. }
  56. int Frame::getHauteur(){
  57. return this->hauteur;
  58. }
  59. void Frame::setLargeur(int l){
  60. this->largeur = l;
  61. }
  62. void Frame::setHauteur(int h){
  63. this->hauteur = h;
  64. }
  65. void Frame::Dessiner(){
  66. glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
  67.     glMatrixMode( GL_MODELVIEW ); 
  68. glLoadIdentity( );
  69.     gluLookAt(3,4,2,0,0,0,0,0,1);
  70. glRotated(180,0,0,1);
  71. Rectangle *r = new Rectangle(0,0,0,10,200,100);
  72. r->draw();
  73.     glEnd();
  74.     glFlush();   
  75. SDL_GL_SwapBuffers();
  76. }
 


Frame.h

Code :
  1. #ifndef _FRAME_H_
  2. #define _FRAME_H_
  3. #pragma once
  4. #include <iostream>
  5. #include <windows.h>
  6. #include <GL/gl.h>
  7. #include <GL/glu.h>
  8. #include <SDL/SDL.h>
  9. #include "Rectangle.h"
  10. class Frame
  11. {
  12. private :
  13.  int largeur;
  14.  int hauteur;
  15. public:
  16.  // Constructeur
  17.  Frame(int l, int h);
  18.  // Destructeur
  19.  ~Frame(void);
  20.  // Methode de type GET et SET
  21.  int getLargeur();
  22.  int getHauteur();
  23.  void setLargeur(int l);
  24.  void setHauteur(int h);
  25.  void Dessiner();
  26. };
  27. #endif
   

Rectangle.cpp

 
Code :
  1. #include "Rectangle.h"
  2. Rectangle::Rectangle(void){
  3. x = 0;
  4. y = 0;
  5. z = 0;
  6. L = 0;
  7. l = 0;
  8. h = 0;
  9. }
  10. Rectangle::Rectangle(double xx, double yy, double zz, double LL, double ll, double hh){
  11. x = xx;
  12. y = yy;
  13. z = zz;
  14. L = LL;
  15. l = ll;
  16. h = hh;
  17. }
  18. Rectangle::~Rectangle(void){
  19. }
  20. // GET
  21. double Rectangle::getX(){
  22. return x;
  23. }
  24. double Rectangle::getY(){
  25. return y;
  26. }
  27. double Rectangle::getZ(){
  28. return z;
  29. }
  30. double Rectangle::getLongueur(){
  31. return L;
  32. }
  33. double Rectangle::getLargeur(){
  34. return l;
  35. }
  36. double Rectangle::getHauteur(){
  37. return h;
  38. }
  39. // SET
  40. void Rectangle::setX(double d){
  41. x = d;
  42. }
  43. void Rectangle::setY(double d){
  44. y = d;
  45. }
  46. void Rectangle::setZ(double d){
  47. z = d;
  48. }
  49. void Rectangle::setLongueur(double d){
  50. L = d;
  51. }
  52. void Rectangle::setLargeur(double d){
  53. l = d;
  54. }
  55. void Rectangle::setHauteur(double d){
  56. h = d;
  57. }
  58. void Rectangle::draw(){
  59. glBegin(GL_QUADS);
  60. // Face de devant
  61. glColor3ub(255,0,0); //face rouge
  62. glVertex3d(x,y,z);
  63.     glVertex3d(x,y,z+h);
  64.     glVertex3d(x+L,y,z+h);
  65.     glVertex3d(x+L,y,z);
  66.    
  67. // Face de gauche
  68.     glColor3ub(0,255,0); //face verte
  69. glVertex3d(x,y,z);
  70.     glVertex3d(x,y,z+h);
  71.     glVertex3d(x,y+l,z+h);
  72.     glVertex3d(x,y+l,z);
  73. // Face de derriere
  74.     glColor3ub(0,0,255); //face bleue
  75.     glVertex3d(x,y+l,z);
  76.     glVertex3d(x,y+l,z+h);
  77.     glVertex3d(x+L,y+l,z+h);
  78.     glVertex3d(x+L,y+l,z);
  79. // Face de droite
  80.     glColor3ub(255,255,0); //face jaune
  81.     glVertex3d(x+L,y,z);
  82.     glVertex3d(x+L,y,z+h);
  83.     glVertex3d(x+L,y+l,z+h);
  84.     glVertex3d(x+L,y+l,z);
  85. // Face du dessous
  86.     glColor3ub(0,255,255); //face cyan
  87.     glVertex3d(x,y,z);
  88.     glVertex3d(x,y+l,z);
  89.     glVertex3d(x+L,y+l,z);
  90.     glVertex3d(x+L,y,z);
  91.     glColor3ub(255,0,255); //face magenta
  92.     glVertex3d(x,y,z+h);
  93.     glVertex3d(x,y+l,z+h);
  94.     glVertex3d(x+L,y+l,z+h);
  95.     glVertex3d(x+L,y,z+h);
  96. glEnd();
  97. }
 


Rectangle.h

Code :
  1. #ifndef _RECTANGLE_H_
  2. #define _RECTANGLE_H_
  3. #pragma once
  4. #include <iostream>
  5. #include <SDL/SDL.h>
  6. #include <windows.h>
  7. #include <GL/gl.h>
  8. #include <GL/glu.h>
  9. class Rectangle
  10. {
  11. private :
  12.  double x, y, z, L, l, h;
  13. public:
  14.  Rectangle(void);
  15.  Rectangle(double xx, double yy, double zz, double LL, double ll, double hh);
  16.  ~Rectangle(void);
  17.  // GET
  18.  double getX();
  19.  double getY();
  20.  double getZ();
  21.  double getLongueur();
  22.  double getLargeur();
  23.  double getHauteur();
  24.  // SET
  25.  void setX(double d);
  26.  void setY(double d);
  27.  void setZ(double d);
  28.  void setLongueur(double d);
  29.  void setLargeur(double d);
  30.  void setHauteur(double d);
  31.  void draw();
  32. };
  33. #endif


Message édité par the_phoenix2 le 24-07-2007 à 14:09:33
Reply

Marsh Posté le 26-07-2007 à 00:39:33    

Bon, bah après pas mal de galère pour installer code::blocks, j'y suis arrivé et ca fonctionne sous code::blocks (car pas besoin de #include <windows.h> ) donc je migre sous code::blocks :)
 
Mais bon, cette erreur sous VC++ m'intrigue... ^^

Reply

Sujets relatifs:

Leave a Replay

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