begin process at 2012 05 30 00:25:11
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

OpenGL

 > 

OpenGL dans une fenetre Win32 ou SDL


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

OpenGL dans une fenetre Win32 ou SDL

lundi 14 juin 2004 à 18:22:28 | OpenGL dans une fenetre Win32 ou SDL

Dante41

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

lundi 14 juin 2004 à 19:27:26 | Re : OpenGL dans une fenetre Win32 ou SDL

xarier

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
lundi 14 juin 2004 à 20:38:32 | Re : OpenGL dans une fenetre Win32 ou SDL

Dante41


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

lundi 14 juin 2004 à 20:55:49 | Re : OpenGL dans une fenetre Win32 ou SDL

xarier

voila je t l'ai envoyer alors consulte ta boite au lettre
Xarier@hotmail.com
lundi 14 juin 2004 à 21:58:22 | Re : OpenGL dans une fenetre Win32 ou SDL

djl


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

...
mardi 15 juin 2004 à 18:21:54 | Re : OpenGL dans une fenetre Win32 ou SDL

Dante41


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



Cette discussion est classée dans : break, hwnd, sdl, gl, glvertex3i


Répondre à ce message

Sujets en rapport avec ce message

Problème avec WM_KEYDOWN: [ par cognac ] Pourquoi est-ce que "j" est toujours égal à 2 lorsque je presse F1(même la première fois). Je pensais qu'à chaque fois que je presse F1 "j" augmente d SDL Opengl lumiere [ par xian240482 ] 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 Probleme de positionenent des lumieres [ par fcoutel ] Bonjour,J'ai recupere le code de Nate Robbins (tutorial de GLUT) sur les lumieres et je ne comprends pas certaines choses.Il y a une function qui dess Charger une librairie avec SDL [ par gillescpp ] Bonjour,J'aimerais avoir access aux fonctions de opengl supérieur a 1.1 (et contenu dans glext.h)Il me faut pour cela utiliser SDL_GL_LoadLibrary pour GESTION CLAVIER SDL [ par Batman60 ] voici un bout de code qui  sert à me déplacer dans une scène 3D opengl ,le problème c'est qu'il faut à chaque fois appuyer sur la touche pour ce dépla [SDL/WxWidgets] Events [ par djardjar ] Bonjour ! Comment on gere les évenements de la SDL dans une fenêtre WxWidgets ?En fait, je voudrais placer ceci dans une fenêtre WxWidgets afin de po API Win32, problème de variable [ par bouba ] Salut a tous, j'ai un blem de variable dans mon programme. Voici mon code source.LPSTR Path="";LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM Le jeu du serpent en C++ / niveau débutant [ par edouard57 ] Bonjour à tous, Je débute en C ++ et opengl. Pour m'entrainer j'essaie de réaliser un petit jeu le serpent. Pour l'instant j'arrive à créer un carré d Problemes OpenGl avec SDL [ par ToNtOnYoYo ] bonjour bonjour... voila mon prob.. j'essaye d'afficher une simple ligne nooire ds ma fenetre ( créé avec SDL) et ca ne marche pas .. je vous laiss TEXTURE SDL_IMAGE JPEG [ par Batman60 ] salutquelqu'un peut me dire ce qui cloche dans mon bout de code utilisé pour charger une texture jpeg j'utilise la lib SDL_IMAGE pour celaest-ce que c


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,544 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales