OpenGL dans une fenetre Win32 ou SDL

Signaler
Messages postés
103
Date d'inscription
samedi 13 mars 2004
Statut
Membre
Dernière intervention
15 juillet 2009
-
Messages postés
103
Date d'inscription
samedi 13 mars 2004
Statut
Membre
Dernière intervention
15 juillet 2009
-
Alors , je voulais afficher un cube dans ma fenetre donc voila mon code :
#include <windows.h>
#include <gl/gl.h>
#include <gl/glu.h>
#include <list>
#include <ctime>
#include <math.h>

WNDCLASS W;
HWND hwnd;
MSG msg;
HDC DC;
HGLRC RC;

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
void InitPixelFormat (HDC hDC);
void DrawScreen();

char szClassName[ ] = "WindowsApp";

int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpszCmpParam,int nCmdShow)
{

LPSTR Name = "OpenGL";
memset(&W, 0, sizeof( WNDCLASS));
W.style=CS_HREDRAW | CS_VREDRAW;
W.hInstance=hInst;
W.lpszClassName=Name;
W.hbrBackground=(HBRUSH) GetStockObject (BLACK_BRUSH);
W.lpfnWndProc=WndProc;

RegisterClass(&W);

hwnd = CreateWindowEx(0, Name, Name,
WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU |
WS_MINIMIZEBOX | WS_MAXIMIZEBOX,
0, 0, 800, 570,
NULL, NULL, hInst, NULL);

ShowWindow(hwnd, nCmdShow);
ShowCursor(true);
UpdateWindow(hwnd);
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE:
DC=GetDC (hwnd);
InitPixelFormat (DC);
RC = wglCreateContext (DC);
wglMakeCurrent (DC, RC);
glEnable (GL_DEPTH_TEST);
glClearColor (0,0,0,0);
glEnable(GL_TEXTURE_2D);
break;

case WM_KEYDOWN:
wglMakeCurrent (NULL, NULL);
wglDeleteContext (RC);
ReleaseDC (hwnd,DC);
PostQuitMessage(0);
break;

case WM_DESTROY :
wglMakeCurrent (NULL, NULL);
wglDeleteContext (RC);
ReleaseDC (hwnd,DC);
PostQuitMessage(0); break;
case WM_SIZE:
glViewport (0,0,LOWORD (lParam),HIWORD (lParam));
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
gluPerspective (45,float(LOWORD(lParam))/float(HIWORD (lParam)),1,100);
break;
case WM_PAINT:
DrawScreen ();
break;

break;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}

void InitPixelFormat (HDC hDC)
{

PIXELFORMATDESCRIPTOR pfd =
{
sizeof (PIXELFORMATDESCRIPTOR),
1,
PFD_SUPPORT_OPENGL | PFD_TYPE_RGBA | PFD_DRAW_TO_WINDOW | PFD_DOUBLEBUFFER,
16,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
16,
0, 0, 0, 0, 0, 0, 0
};

SetPixelFormat (hDC, ChoosePixelFormat (hDC, &pfd), &pfd);
}
void DrawScreen()
{
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode (GL_MODELVIEW);
gluLookAt(x,y,z,vx,vy,vz,upx,upy,upz);
glLoadIdentity ();
glPushMatrix();
glBegin(GL_QUADS);

glVertex3i(1,1,1);
glVertex3i(1,-1,1);
glVertex3i(-1,-1,1);
glVertex3i(-1,1,1);

glVertex3i(1,1,-1);
glVertex3i(1,-1,-1);
glVertex3i(-1,-1,-1);
glVertex3i(-1,1,-1);

glVertex3i(1,1,1);
glVertex3i(1,-1,1);
glVertex3i(1,-1,-1);
glVertex3i(1,1,-1);

glVertex3i(-1,1,1);
glVertex3i(-1,-1,1);
glVertex3i(-1,-1,-1);
glVertex3i(-1,1,-1);

glVertex3i(-1,1,-1);
glVertex3i(-1,1,1);
glVertex3i(1,1,1);
glVertex3i(1,1,-1);

glVertex3i(-1,-1,-1);
glVertex3i(-1,-1,1);
glVertex3i(1,-1,1);
glVertex3i(1,-1,-1);

glEnd();
glFlush();
glPopMatrix();
SwapBuffers (DC);
}

Et ca m'affiche un gros truc blanc au milieu de la fenetre .

Sinon pour SDL ben voila mon code :

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <sdl/sdl.h>

static GLboolean should_rotate = GL_TRUE;

static void quitter( int code )
{
SDL_Quit( );
exit( code );
}

static void handle_key_down( SDL_KeyboardEvent * key )
{

// En fonction de la touche appuyee (SDLK_*)
switch( key->keysym.sym )
{
case SDLK_ESCAPE:
quitter(0);
break;
case SDLK_SPACE:
should_rotate = !should_rotate;
break;
case SDLK_UP:
z++;
vz++;
upz++;
break;
default:
break;
}
}

static void reshape(int w, int h)
{
glShadeModel( GL_SMOOTH );
glClearColor( 0, 0, 0, 0 );
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
gluPerspective(60, (GLfloat) w/(GLfloat) h, 1.0,90.0);
}

static void process_events( void )
{
SDL_Event event;

// Tant qu il y en a en file
while( SDL_PollEvent( &event ) )
{
switch( event.type )
{
case SDL_VIDEORESIZE:
reshape(event.resize.w, event.resize.h);
break;

case SDL_KEYDOWN:
case SDL_KEYUP:
handle_key_down(&event.key );
break;

case SDL_QUIT:
quitter(0);
break;
}
}
}

static void draw_screen( void )
{

static float angle=0;
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

glMatrixMode( GL_MODELVIEW );
glLoadIdentity( );

glTranslatef( 0.0, 0.0, -5.0 );
glPolygonMode (GL_FRONT, GL_FILL);
glFrontFace (GL_CCW);

if( should_rotate )
if( ++angle > 360 )
angle = 0;

glRotatef( angle, 0.0, 1.0, 0.0 );
glBegin(GL_QUADS);

glVertex3i(1,1,1);
glVertex3i(1,-1,1);
glVertex3i(-1,-1,1);
glVertex3i(-1,1,1);

glVertex3i(1,1,-1);
glVertex3i(1,-1,-1);
glVertex3i(-1,-1,-1);
glVertex3i(-1,1,-1);

glVertex3i(1,1,1);
glVertex3i(1,-1,1);
glVertex3i(1,-1,-1);
glVertex3i(1,1,-1);

glVertex3i(-1,1,1);
glVertex3i(-1,-1,1);
glVertex3i(-1,-1,-1);
glVertex3i(-1,1,-1);

glVertex3i(-1,1,-1);
glVertex3i(-1,1,1);
glVertex3i(1,1,1);
glVertex3i(1,1,-1);

glVertex3i(-1,-1,-1);
glVertex3i(-1,-1,1);
glVertex3i(1,-1,1);
glVertex3i(1,-1,-1);

glEnd();
glFlush();
SDL_GL_SwapBuffers( );
}

int main( int argc, char* argv[] )
{
const SDL_VideoInfo* info = NULL;int width 0, height 0, bpp = 0;
int flags = 0;

if( SDL_Init( SDL_INIT_VIDEO ) < 0 ) {
fprintf( stderr, "Echec d'initialisation video: %s\n",SDL_GetError( ) );
quitter( 1 );
}

info = SDL_GetVideoInfo( );

if( !info ) {
fprintf( stderr, "Erreur dans la demande d'info video: %s\n",
SDL_GetError( ) );
quitter( 1 );
}

SDL_WM_SetCaption("SDL + OpenGL",NULL);

width = 800;
height = 600;
bpp = info->vfmt->BitsPerPixel;

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

flags = SDL_OPENGL|SDL_RESIZABLE|SDL_FULLSCREEN;
if( SDL_SetVideoMode( width, height, bpp, flags ) == 0 ) {

fprintf( stderr, "Echec lors du reglage du mode video: %s\n",SDL_GetError( ) );
quitter( 1 );
}

reshape( width, height );
glFrontFace( GL_CCW );
while( 1 ) {

process_events( );
draw_screen( );
}

return 0;
}

Et il y a un probleme au niveau des faces donc je n'arrive pas a utiliser openGL et ca me soule quoi !
Dante41 (ou Vengeur41 ca dépend de l'humeur)

"Un myope qui lit sur les lèvres entend mieux lorsqu'il porte des lunettes",Phillipe Geluck

5 réponses

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

bH J'ai pas vraimment compris mais si tu un exemple de cube creé avec openg + sdl fill moi ton mail

Xarier@hotmail.com
xarier@fr.st
www.xarier.fr.st
Messages postés
103
Date d'inscription
samedi 13 mars 2004
Statut
Membre
Dernière intervention
15 juillet 2009

safersephiroth41@aol.com

C'est censé faire un cube mais on voit pas les faces avant du cube , on voit que les arrières , meme avec glFrontFace(...); .
Si tu peux m'envoyer une source qui fait un cube en SDL/OpenGL ca me sauverait et a partir de ca je pourrais faire bien .
Dante41 (ou Vengeur41 ca dépend de l'humeur)

"Un myope qui lit sur les lèvres entend mieux lorsqu'il porte des lunettes",Phillipe Geluck
Messages postés
688
Date d'inscription
jeudi 26 décembre 2002
Statut
Membre
Dernière intervention
19 mai 2005

voila je t l'ai envoyer alors consulte ta boite au lettre
Xarier@hotmail.com
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
pour ton code win32 c'est normal je pense,, ton truc blanc c'est ton cube

affecte des couleurs diff pour chaques face et tu le vera mieux

glColor3f(1,0,1);
glVertex3i(1,1,1);
glVertex3i(1,-1,1);
glVertex3i(-1,-1,1);
glVertex3i(-1,1,1);

glColor3f(0,1,0);
glVertex3i(1,1,-1);
glVertex3i(1,-1,-1);
glVertex3i(-1,-1,-1);
glVertex3i(-1,1,-1);

...
Messages postés
103
Date d'inscription
samedi 13 mars 2004
Statut
Membre
Dernière intervention
15 juillet 2009

Meme avec les couleurs , l'ecran est tout d'une couleur unie , on voit pas la forme .

Dante41 (ou Vengeur41 ca dépend de l'humeur)

"Un myope qui lit sur les lèvres entend mieux lorsqu'il porte des lunettes",Phillipe Geluck