SDL Opengl lumiere

Signaler
Messages postés
15
Date d'inscription
jeudi 5 février 2004
Statut
Membre
Dernière intervention
15 juin 2006
-
Messages postés
15
Date d'inscription
jeudi 5 février 2004
Statut
Membre
Dernière intervention
15 juin 2006
-
Alors là, je comprend pas!

Voila un mon code (ultra simplifier) et il ne marche pas : Il plante sur le glend() !
Si c'est ,comme je le crois, une erreur bete et mechante; dite le moi svp.

Merci d'avance.

Mon code :

#include <stdlib.h>
#include <stdio.h>

#include <windows.h>
#include "SDL.h"
#include <GL/gl.h>
#include <GL/glu.h>

#pragma comment(lib,"Opengl32.lib")
#pragma comment(lib,"Glu32.lib")

void STD_ERROR(char * message)
{
fprintf(stderr, message);
fprintf(stderr, SDL_GetError());
fprintf(stderr, "\n");
exit(1);
}

void STD_OUT(char * message)
{
fprintf(stdout, message);
fprintf(stdout, "\n");
}

void process_events( void )
{
SDL_Event event;

while( SDL_PollEvent( &event ) ) {

switch( event.type ) {
case SDL_KEYDOWN:
exit(0);
break;
case SDL_QUIT:
exit(0);
break;
}
}
}

int main( int argc, char* argv[] )
{

int width=1024,height=728;
float ratio = (float) width / (float) height;

if ( SDL_Init( SDL_INIT_VIDEO ) < 0 )
STD_ERROR("Impossible d'initialiser SDL \n");

STD_OUT("Initialisation SDL reussit");
atexit(SDL_Quit );
SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 5 );
SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 5 );
SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 5 );
SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 16 );
SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );

if ( SDL_SetVideoMode(width , height ,24, SDL_OPENGL + SDL_FULLSCREEN + SDL_INIT_TIMER) == NULL )
STD_ERROR("impossible d'initialise le mode video");
STD_OUT("Initialisation mode video reussit");

glClearColor( 0, 0, 0, 0 );
glViewport( 0, 0, width, height );
glMatrixMode( GL_PROJECTION );
gluPerspective( 45.0f, ratio, 0.1f, 100.0f );
glMatrixMode(GL_MODELVIEW);

GLfloat lumiere_position[4];
GLfloat lumiere_diffusion[4];
GLfloat lumiere_ambient[4];

lumiere_ambient[0]=1.0f;
lumiere_ambient[1]=1.0f;
lumiere_ambient[2]=1.0f;
lumiere_ambient[3]=1.0f;
glLightfv(GL_LIGHT1, GL_AMBIENT,lumiere_ambient);

lumiere_diffusion[0]=1.0f;
lumiere_diffusion[1]=1.0f;
lumiere_diffusion[2]=1.0f;
lumiere_diffusion[3]=0.0f;
glLightfv(GL_LIGHT1, GL_DIFFUSE,lumiere_diffusion);

lumiere_position[0]=100.0f;
lumiere_position[1]=0.0f;
lumiere_position[2]=0.0f;
lumiere_position[3]=0.0f;
glLightfv(GL_LIGHT1, GL_POSITION,lumiere_position);

glEnable(GL_LIGHT1);
glEnable(GL_LIGHTING);

GLfloat angle;
angle=0.0f;

while(1)
{

glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

glLoadIdentity();

glTranslatef(0.0f,0.0f,-5.0f);

glRotatef(angle,1.0f,0.0f,0.0f);
glRotatef(angle,0.0f,1.0f,0.0f);
glRotatef(angle,0.0f,0.0f,1.0f);

angle+=0.5f;

glBegin(GL_QUADS);

glNormal3f( 0.0f, 0.0f, 1.0f);
glVertex3f(-1.0f, -1.0f, 1.0f);
glVertex3f( 1.0f, -1.0f, 1.0f);
glVertex3f( 1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f, 1.0f, 1.0f);

glNormal3f( 0.0f, 0.0f,-1.0f);
glVertex3f(-1.0f, -1.0f, -1.0f);
glVertex3f(-1.0f, 1.0f, -1.0f);
glVertex3f( 1.0f, 1.0f, -1.0f);
glVertex3f( 1.0f, -1.0f, -1.0f);

glNormal3f( 0.0f, 1.0f, 0.0f);
glVertex3f(-1.0f, 1.0f, -1.0f);
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f( 1.0f, 1.0f, 1.0f);
glVertex3f( 1.0f, 1.0f, -1.0f);

glNormal3f( 0.0f,-1.0f, 0.0f);
glVertex3f(-1.0f, -1.0f, -1.0f);
glVertex3f( 1.0f, -1.0f, -1.0f);
glVertex3f( 1.0f, -1.0f, 1.0f);
glVertex3f(-1.0f, -1.0f, 1.0f);

glNormal3f( 1.0f, 0.0f, 0.0f);
glVertex3f( 1.0f, -1.0f, -1.0f);
glVertex3f( 1.0f, 1.0f, -1.0f);
glVertex3f( 1.0f, 1.0f, 1.0f);
glVertex3f( 1.0f, -1.0f, 1.0f);

glNormal3f(-1.0f, 0.0f, 0.0f);
glVertex3f(-1.0f, -1.0f, -1.0f);
glVertex3f(-1.0f, -1.0f, 1.0f);
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f, 1.0f, -1.0f);

STD_OUT("avant glEnd()");
glEnd(); // il plante là
STD_OUT("apres glEnd()");

SDL_GL_SwapBuffers();

Sleep(50);

process_events();
}

return 0;
}

12 réponses

Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3
"SDL_SetVideoMode(width , height ,24, SDL_OPENGL + SDL_FULLSCREEN + SDL_INIT_TIMER)"

-> Les "+" ne devraient pas être des OU logiqes bit à bit ("|") ?

Patience et longueur de temps font plus que force ni que rage....
Messages postés
688
Date d'inscription
jeudi 26 décembre 2002
Statut
Membre
Dernière intervention
19 mai 2005

oui c vraie c comme adit funto car les | gere les bits alors que les + gere les int
@+
Life is Short 8-)
Messages postés
15
Date d'inscription
jeudi 5 février 2004
Statut
Membre
Dernière intervention
15 juin 2006

Normalement ca change rien, mais dans le doute, j'ai fait le changement : et vous savez quoi, ca a rien changé!

Le preogramme plante toujours au niveau du glend()!
Le truc le plus marrant, c'est que lorsque l'on n'utilse pas la lumiere (on enleve glEnable(GL_LIGHTING); ) tout marche tres bien !

donc je renouvelle ma question , aider moi svp !
Messages postés
688
Date d'inscription
jeudi 26 décembre 2002
Statut
Membre
Dernière intervention
19 mai 2005

re :
voila je viend de compilait ton code sous vc++6 et ca marche a merveille :)

je pense que c t'une erreur venante de ton compilateur tu utilise Koi au juste ?
Life is Short 8-)
Messages postés
15
Date d'inscription
jeudi 5 février 2004
Statut
Membre
Dernière intervention
15 juin 2006

vc++6 aussi, avec SDL 1.2.7
c'est peut etre les libraries de opengl, je vais creusé
merci
Messages postés
688
Date d'inscription
jeudi 26 décembre 2002
Statut
Membre
Dernière intervention
19 mai 2005

ben chez moi j'ai la sdl 1.2.6 mais je pense pas que c du a ca.

dit estceque l'erreur que ta que c quand tu lance l'exe il te donne une erreur ? si c ca alors c un prob quiest cosé par la sdl avec vc++ et ca solution cde compiler le code et de cré lexe et de le lancer depuis le fichier exe pas depuis le vc++
bonne chance je pense que c ca
Life is Short 8-)
Messages postés
15
Date d'inscription
jeudi 5 février 2004
Statut
Membre
Dernière intervention
15 juin 2006

ET non !

Il n'y a pas de message d'erreur : le programme stope d'un coup!

j'ai retrouver la sdl 1.2.6, mais ca marche pas quand meme.

Le coup de lancer l'executable directement non plus!

Le truc le plus bissard c'est que opengl marche bien : j'ai fait un autre projet en n'utilisant que opengl (et pas sdl) et ca marche !
Mais j'aurais aime avoir les outil de SDL (le blit, etc...).

Donc pour en revenir a ma premiere phrase de ce topic :
"Alors là, je comprend pas!"

Si ta d'autre sugestion, je prends!
Messages postés
15
Date d'inscription
jeudi 5 février 2004
Statut
Membre
Dernière intervention
15 juin 2006

J'ai trouvé!

J'ai lancer l'exzecutable sur un autre ordinateur et .... ca marche!

Donc le probleme ne vient pas de ma programation mes de mon ordinateur. Alors que SDL marche sans opengl : j'ai fait plein de projet avec et il n'y a pas eu de probleme.

Pour la petite info voila ce que j'ai dans le fichier stderr lorsque je le lance sur mon ordinateur:
Fatal signal: Segmentation Fault (SDL Parachute Deployed)

Et merci quand meme.

PS : Je vais me pendre juste apres
Messages postés
688
Date d'inscription
jeudi 26 décembre 2002
Statut
Membre
Dernière intervention
19 mai 2005

salut ben moi j'ai d'autre genre d'erreur meme avec la win32 quand je veut passer au mode plien ecran il me donne une erreur sous forme de messagebox en disent que le break point n'est plus sur le bon endroit (meme si je suis en mode realesed ) autre chose j'ai un prob je c pas ou ca vient mais voila:
quand je compile sous winxp avec vc++ des fois mon poste ce redemare et sous win98 (le poste ce blog) j'ai essayser de reainstaller vc++ mais c toujour le meme prob
pour plus d'info j'ai tester ca avec vc++7 et 6

Merci
Life is Short 8-)
Messages postés
212
Date d'inscription
dimanche 29 juin 2003
Statut
Membre
Dernière intervention
13 mai 2006

alors moi aussi je dois me pendre ??
a mon tour j'ai ce probleme de parachutte et pas moyen de m'en debarrasser ....
ca c'est lourd !!!
si t'as trouvé la solution xian a part se tirer une balle !

>:) cppDupDup34 >:)
Messages postés
688
Date d'inscription
jeudi 26 décembre 2002
Statut
Membre
Dernière intervention
19 mai 2005

voila la solution qu'il avait trouver c que il a utiliser une de mes sources figuente sur le site , et il a comparer :D alors il ma dit que ca marcher now :] alors f comme lui :] (un peu de pub)
Life is Short 8-)
Messages postés
15
Date d'inscription
jeudi 5 février 2004
Statut
Membre
Dernière intervention
15 juin 2006

En faite il faut remplacer
lumiere_position[3]=0.0f;

par
lumiere_position[3]=1.0f;
ou n'importe quoi qui est different de 0

Ca change la maniere dont est utilisé la lumiere. pour plus de details aller voir msdn.

Et normalement ca marche!