OpenGL dans une fenetre Win32 ou SDL

Dante41 Messages postés 103 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 15 juillet 2009 - 14 juin 2004 à 18:22
Dante41 Messages postés 103 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 15 juillet 2009 - 15 juin 2004 à 18:21
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

xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
14 juin 2004 à 19:27
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
0
Dante41 Messages postés 103 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 15 juillet 2009
14 juin 2004 à 20:38
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
0
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
14 juin 2004 à 20:55
voila je t l'ai envoyer alors consulte ta boite au lettre
Xarier@hotmail.com
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
14 juin 2004 à 21:58
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);

...
0

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

Posez votre question
Dante41 Messages postés 103 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 15 juillet 2009
15 juin 2004 à 18:21
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
0
Rejoignez-nous