Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
492 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Probleme openGL et POO sous VC++

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme openGL et POO sous VC++

n°1590195
the_phoeni​x2
Posté le 23-07-2007 à 14:33:05  profilanswer
 

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 :)

mood
Publicité
Posté le 23-07-2007 à 14:33:05  profilanswer
 

n°1590340
_darkalt3_
Proctopathe
Posté le 23-07-2007 à 16:53:11  profilanswer
 

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
n°1590360
the_phoeni​x2
Posté le 23-07-2007 à 17:10:07  profilanswer
 

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
n°1590366
_darkalt3_
Proctopathe
Posté le 23-07-2007 à 17:13:49  profilanswer
 

Poste ton code / tes erreurs


---------------
Töp of the plöp
n°1590381
the_phoeni​x2
Posté le 23-07-2007 à 17:40:57  profilanswer
 

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
n°1591590
the_phoeni​x2
Posté le 26-07-2007 à 00:39:33  profilanswer
 

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... ^^


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Probleme openGL et POO sous VC++

 

Sujets relatifs
Problème de type sur Variable de formulaireprobleme fread magic
probleme integration flash dans firefoxProblème avec fonction IF NOT EXIST
Problème de closure ? [JAR] Problème avec un Jar dans un autre JAr
[PHP]Probleme de tableau aprés un explodeProbleme repaint et passage de variables
problème de compilation[ASP.NET][Résolu] Problème envoi de mails
Plus de sujets relatifs à : Probleme openGL et POO sous VC++


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR