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

  FORUM HardWare.fr
  Programmation
  C++

  fenetre openGL qui se ferme pas ...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

fenetre openGL qui se ferme pas ...

n°978600
Amonchakai
Posté le 11-02-2005 à 13:40:16  profilanswer
 

Bojour, moi j'ais un ptit problème : ma fenêtre en openGL elle se ferme pas... Plus précisément je clique sur 'x' et là pas de problème ca ce ferme. Mais quand j'utilise l'ordinateur il se passe comme un truc : il rame!!!. Je lance le gestionnaire des taches et là rien de spécial mais quand je vais voir la liste des processus et bien je retrouve mon programme qui continue a tourner... Avez vous une idée de ce qui se passe ?
Sinon une autre petite question : voilà j'aimerais bien faires des niveaux comme dans les jeux : aurriez vous une idée où je peut trouver un logiciel qui puisse faire des niveau 3D. ily aurrait bien la solution de definir chaque mur, chaque sol, ... par ses coordonnées en 3D mais... Vous avez rien de moin laborieux surtout si tu veut faire quelque chose de joli (et je te parle pas des personnages vous vous imaginer definir chaques personnages point par point...)
merci.[cpp][/cpp]

mood
Publicité
Posté le 11-02-2005 à 13:40:16  profilanswer
 

n°978920
TotalRecal​l
Posté le 11-02-2005 à 16:19:46  profilanswer
 

OpenGL...  unix, win32, glut ??
et poste un peu ton code de fin, pour voir comment tu fermes ton programme.


---------------
Topic .Net - C# @ Prog
n°978990
djok_fb
C'était mieux avant!
Posté le 11-02-2005 à 16:58:27  profilanswer
 

tu as dû mal associé ta fermeture de fenêtre...mais c'est en quoi? GLUT, SDL???

n°979335
Amonchakai
Posté le 12-02-2005 à 10:45:36  profilanswer
 

j'ais crée ma fenêtre avec glut pour le code voilà :

Citation :


#include<windows.h>
#include<GL/gl.h>
#include<GL/glut.h>
#include<math.h>  
 
void Display();
void Reshape(int, int);
void Init();
void creer_cube();
void Special(int key, int x, int y);
void Idle();
int id_cube;
double angle;  
double angX = 45, angZ = 45;
int xCam, yCam, zCam;
 
int main(int argc, char** argv){
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
  glutInitWindowSize(640, 480);
  glutInitWindowPosition(50, 50);
  glutCreateWindow("Cube 3D en openGL" );
  Init();
 
  glutDisplayFunc(Display);
  glutReshapeFunc(Reshape);
  glutIdleFunc(Idle);
  glutSpecialFunc(Special);
  glutMainLoop();
  return 0;
}
 
void Display(){
glClearColor(0,0,0,0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(10 * cos(angX)*sin(angZ),10 * cos(angZ),10 * sin(angZ)*sin(posX),0,0,0,0,1,0);
glCallList(id_cube);
 
glPushMatrix();
glPopMatrix();
glPushMatrix();
glRotated(angle,0,1,0);
glTranslatef(0,0,-5);
glRotated(angle,1,0,0);
glScaled(0.5,0.5,0.5);
 
glCallList(id_cube);
glPopMatrix();
glPushMatrix();
glRotated(angle,0,1,0);
glTranslatef(0,0,5);
glRotated(angle,0,1,0);
glScaled(0.5,0.5,0.5);
 
glCallList(id_cube);
glPopMatrix();
glPushMatrix();
glRotated(angle,0,1,0);
glutSwapBuffers();
}
 
void Reshape(int h, int w){      
     glViewport(0,0,w,h);
     glMatrixMode(GL_PROJECTION);
     glLoadIdentity();
     gluPerspective(100.0,(float) w/h,1.0,15.0);
}
 
void Init(){
     glEnable(GL_DEPTH_TEST);
     creer_cube();
}
 
void creer_cube(){
     id_cube = glGenLists(1);
     glNewList(id_cube, GL_COMPILE);
 
glBegin(GL_QUADS);
glColor3d(1,0,0);
glVertex3i(1,1,1);
glVertex3i(1,-1,1);
glVertex3i(-1,-1,1);
glVertex3i(-1,1,1);
 
glColor3d(0,1,0);
glVertex3i(1,1,-1);
glVertex3i(1,-1,-1);
glVertex3i(-1,-1,-1);
glVertex3i(-1,1,-1);
 
glColor3d(0,0,1);
glVertex3i(1,1,1);
glVertex3i(1,-1,1);
glVertex3i(1,-1,-1);
glVertex3i(1,1,-1);
 
glColor3d(1,1,0);
glVertex3i(-1,1,-1);
glVertex3i(-1,1,1);
glVertex3i(1,1,1);
glVertex3i(1,1,-1);
 
glColor3d(0,1,1);
glVertex3i(-1,-1,-1);
glVertex3i(-1,-1,1);
glVertex3i(1,-1,1);
glVertex3i(1,-1,-1);
 
glColor3d(1,0,1);
glVertex3i(-1,1,1);
glVertex3i(-1,-1,1);
glVertex3i(-1,-1,-1);
glVertex3i(-1,1,-1);
glEnd();
 
glEndList();
}
 
void Idle(){
     angle += 1;
     if(angle > 360) angle = 0;
     glutPostRedisplay();
}
 
void Special(int key, int x, int y){
     switch(key){
                 case GLUT_KEY_UP : angZ +=0.1; break;
                 case GLUT_KEY_DOWN : angZ -= 0.1; break;
                 case GLUT_KEY_RIGHT : angX += 0.1; break;
                 case GLUT_KEY_LEFT : angX -= 0.1; break;
     }
}


 
et mon problème c'est lors de la fermeture ...
et Merci d'avoir répondu

n°979355
bjone
Insert booze to continue
Posté le 12-02-2005 à 11:36:35  profilanswer
 

peut-être détruire la display list ?

n°979369
Tarabiscot​e
Posté le 12-02-2005 à 12:09:56  profilanswer
 

amonchakai a écrit :


gluLookAt(10 * cos(angX)*sin(angZ),10 * cos(angZ),10 * sin(angZ)*sin(posX),0,0,0,0,1,0);  


 
Ca ne serait pas plutôt :
gluLookAt(10 * cos(angX)*sin(angZ),10 * cos(angZ),10 * sin(angZ)*sin(angX),0,0,0,0,1,0);  
 
Sinon chez moi ça s'arrête.

n°979402
Amonchakai
Posté le 12-02-2005 à 13:48:53  profilanswer
 

Sur ça :  

Citation :

gluLookAt(10 * cos(angX)*sin(angZ),10 * cos(angZ),10 * sin(angZ)*sin(posX),0,0,0,0,1,0);  


moi j'ais aucun problème et ça fonctionne exactement comme je le veut.
 
sinon je débute l'openGL donc est ce que on pourrait m'expliquer ce que vous voulez dire par :

Citation :

détruire la display list

. Parce que ce que je comptrend pas c'est que mon programme est sencé être arrété : on ne le voit plus dans le gestionnaire des taches et même quand on regarde l'exécutions des taches dans les informations systèmes. il ne devrait ne devrait plus faire parti des processus non ? :pt1cable:
parce que pour moi programme arrété qu'il soit foireux ou pas il est plus censé être exécuté donc donc le code n'a plus aucunne importance non ? j'avoue être un peut perplexe...

n°979407
Amonchakai
Posté le 12-02-2005 à 13:53:07  profilanswer
 

oups... pardon sur ça :

Citation :

gluLookAt(10 * cos(angX)*sin(angZ),10 * cos(angZ),10 * sin(angZ)*sin(posX),0,0,0,0,1,0);


vous avez raison c'est bien :

Citation :

gluLookAt(10 * cos(angX)*sin(angZ),10 * cos(angZ),10 * sin(angZ)*sin(angX),0,0,0,0,1,0);  


 
érreur de recopiage ...  :D

n°979454
Tarabiscot​e
Posté le 12-02-2005 à 14:37:45  profilanswer
 

Tu devrais quand même ralentir un peu ton programme avec un petit Sleep par exemple.
 
Sinon tu utilises quel compilateur et quelle version de glut ?

n°979468
Amonchakai
Posté le 12-02-2005 à 14:53:29  profilanswer
 

Bon pour le ralentir c'est pas compliqué : faut toucher à l'incrémentation de la variable angle dans la fonction Idle() (moi je le ralentit pas car sur mon pc : un athlon 900 + geforce 2 MX ca tourne pas trop vite ...) pour un P4 essaye de mettre 0.05. (rem angle est déjà en double)
 
Sinon je programme avec dev-c++ version 4.9.9.1
et ma version de glut je l'ais eu avec openGL 1.2 et quand j'ouvre glut.h il me donne :

Citation :

GLUT_API_VERSION=4

mood
Publicité
Posté le 12-02-2005 à 14:53:29  profilanswer
 

n°979471
Tarabiscot​e
Posté le 12-02-2005 à 15:05:41  profilanswer
 

amonchakai a écrit :

Bon pour le ralentir c'est pas compliqué : faut toucher à l'incrémentation de la variable angle dans la fonction Idle() (moi je le ralentit pas car sur mon pc : un athlon 900 + geforce 2 MX ca tourne pas trop vite ...) pour un P4 essaye de mettre 0.05. (rem angle est déjà en double)


 
Je disait ça pour éviter que ça te prenne 100% du processeur c'est tout.
 

amonchakai a écrit :


Sinon je programme avec dev-c++ version 4.9.9.1
et ma version de glut je l'ais eu avec openGL 1.2 et quand j'ouvre glut.h il me donne :

Citation :

GLUT_API_VERSION=4



 
Hum c'est une vielle version tu devrais la mettre à jour.

n°979561
Amonchakai
Posté le 12-02-2005 à 17:54:29  profilanswer
 

j'ais téléchargé openGL 2.0 Mais j'ais Win98 donc je peut pas vois les processus j'aurrais la réponce si sa marche demain...
Je voudrais juste poser une question : sleep(); d'après mes souvenir (je suis sûrement pas à jour) ça travaille à la seconde près. pas terrible pour une fonction qui travaille sur le rafraichissement de l'image non ?
 
remarque : comment on fait pour avoir le nombre d'image affichée par seconde ?

n°979614
bjone
Insert booze to continue
Posté le 12-02-2005 à 19:27:33  profilanswer
 

tu mesures, mais après je sais pas si Glut expose quelque chose d'indépendant de l'os.
 
sinon sous windows tu le fais avec QueryPerformanceTimer / QueryPerformanceFrequency.

n°979616
bjone
Insert booze to continue
Posté le 12-02-2005 à 19:28:39  profilanswer
 

et si tu veux réguler ton framerate, tu le fais avec un timer, où c'est un message qui te permet de savoir quand tu dois rafraichir.

n°979637
Tarabiscot​e
Posté le 12-02-2005 à 20:16:37  profilanswer
 

sleep est à la seconde mais pas Sleep qui est à la milliseconde (uniquement sous windows) :
http://msdn.microsoft.com/library/ [...] /sleep.asp


Message édité par Tarabiscote le 12-02-2005 à 20:17:45
n°979655
Amonchakai
Posté le 12-02-2005 à 20:52:33  profilanswer
 

OK, merci pour ces renseignement !!!  :bounce:

n°979891
Amonchakai
Posté le 13-02-2005 à 13:56:50  profilanswer
 

bon j'ais pu essayer avec openGL 2.0 et ... ça change rien mes programmes continuent a se partager gaiment toute la charge processeur malgré qu'il soient tous arrétés!! :fou:

n°980177
Zeross
Posté le 13-02-2005 à 18:36:44  profilanswer
 

J'aimerais savoir ce que tu appelles OpenGL2 au juste ;)
Non parce qu'OpenGL ne fonctionne pas du tout comme DirectX et on ne télécharge pas OpenGL 2 comme ça. OpenGL 2 tout ce que ça apporte par rapport au 1.5 c'est un ensemble d'extensions et jusqu'à preuve du contraire aucun IHV n'a pour l'instant des drivers OpenGL 2

n°981745
Davy_D
Posté le 14-02-2005 à 23:48:51  profilanswer
 

C'est clair que la moindre pause d'une milliseconde tombe direct l'occupation CPU en laissant un peu bosser l'ordonnanceur :)


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

  fenetre openGL qui se ferme pas ...

 

Sujets relatifs
Problem pour afficher fenêtre Windows[wxWidget] Fenêtre parent et enfant
[openGl] threads[C-OpenGL] Qu'est ce que MESA ???
Ouverture d'un site dans fenêtre sans bouton ni menu ?empecher la fermeture d'une fenetre
[C OpenGL] Ou trouver les sources de Quake 2 ?Aide Delphi - Fenetre ( 1024 * 768 )
Pouvoir éteindre et faire perdurer le son ajouté à un site [FERME]Intervenir dans une fenêtre après l'avoir ouverte - problèmes de temps
Plus de sujets relatifs à : fenetre openGL qui se ferme pas ...


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