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
Afficher la suite