SDL Opengl lumiere

xian240482 Messages postés 15 Date d'inscription jeudi 5 février 2004 Statut Membre Dernière intervention 15 juin 2006 - 11 juil. 2004 à 20:11
xian240482 Messages postés 15 Date d'inscription jeudi 5 février 2004 Statut Membre Dernière intervention 15 juin 2006 - 7 août 2004 à 12:06
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

Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
11 juil. 2004 à 21:47
"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....
0
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
12 juil. 2004 à 03:51
oui c vraie c comme adit funto car les | gere les bits alors que les + gere les int
@+
Life is Short 8-)
0
xian240482 Messages postés 15 Date d'inscription jeudi 5 février 2004 Statut Membre Dernière intervention 15 juin 2006
12 juil. 2004 à 17:49
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 !
0
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
12 juil. 2004 à 18:18
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-)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
xian240482 Messages postés 15 Date d'inscription jeudi 5 février 2004 Statut Membre Dernière intervention 15 juin 2006
12 juil. 2004 à 23:53
vc++6 aussi, avec SDL 1.2.7
c'est peut etre les libraries de opengl, je vais creusé
merci
0
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
13 juil. 2004 à 00:06
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-)
0
xian240482 Messages postés 15 Date d'inscription jeudi 5 février 2004 Statut Membre Dernière intervention 15 juin 2006
13 juil. 2004 à 00:30
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!
0
xian240482 Messages postés 15 Date d'inscription jeudi 5 février 2004 Statut Membre Dernière intervention 15 juin 2006
13 juil. 2004 à 10:36
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
0
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
13 juil. 2004 à 12:06
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-)
0
cppdupdup34 Messages postés 212 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 13 mai 2006
5 août 2004 à 18:17
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 >:)
0
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
6 août 2004 à 05:22
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-)
0
xian240482 Messages postés 15 Date d'inscription jeudi 5 février 2004 Statut Membre Dernière intervention 15 juin 2006
7 août 2004 à 12:06
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!
0
Rejoignez-nous