J´ai fais mon premier projet OpenGL!!! Voici le code source, vous pouvez me dire si il est correct, parcequ´il marche, mais je eux voir si je l´ai bien écris ( erreur de sintaxes par exempls)
LRESULT CALLBACK WndProc ( HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam);
void EnableOpenGL ( HWND hWnd, HDC *hDC, HGLRC *hRC);
void DisableOpenGL ( HWND hWnd, HDC hDC, HGLRC hRC);
int WINAPI WinMain ( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int iCmdShow)
{
WNDCLASS wc;
HWND hWnd;
HDC hDC;
HGLRC hRC;
MSG msg;
BOOL bQuit = FALSE;
float theta = 0.0f;
wc.style = CS_OWNDC;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon ( NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor ( NULL, IDC_ARROW);
wc.hbrBackground = ( HBRUSH) GetStockObject ( BLACK_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName = " GLSample";
RegisterClass ( &);
hWnd = CreateWindow (
" GLSample", " OpenGL Sample",
WS_CAPTION | WS_POPUPWINDOW | WS_VISIBLE,
0, 0, 800, 640,
NULL, NULL, hInstance, NULL);
EnableOpenGL ( hWnd, &, &);
while ( !bQuit)
{
if ( PeekMessage ( &, NULL, 0, 0, PM_REMOVE))
{
if ( msg.message == WM_QUIT)
{
bQuit = TRUE;
}
else
{
TranslateMessage ( &);
DispatchMessage ( &);
}
}
else
{
glClearColor ( 0.0f, 0.0f, 0.0f, 0.0f);
glClear ( GL_COLOR_BUFFER_BIT);
glPushMatrix ( );
glRotatef ( theta, 0.0f, 0.0f, 0.0f);
glBegin ( GL_POLYGON);
glColor3f ( 1.0f, 0.0f, 0.0f); glVertex2f ( -0.1f, 0.1f);
glVertex2f ( -0.5f, -0.9f);
glColor3f ( 0.0f, 0.0f, 1.0f); glVertex2f ( 0.5f, -0.5f);
glVertex2f ( 0.5f, 1.0f);
glVertex2f ( 1.3f, 0.3f);
glVertex2f ( 1.0f, 0.5f);
glEnd ( );
glPopMatrix ( );
SwapBuffers ( hDC);
theta += 1.0f;
Sleep ( 1);
}
}
DisableOpenGL ( hWnd, hDC, hRC);
DestroyWindow ( hWnd);
return msg.wParam;
}
LRESULT CALLBACK WndProc ( HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
switch ( message)
{
case WM_CREATE:
return 0;
case WM_CLOSE:
PostQuitMessage ( 0);
return 0;
case WM_DESTROY:
return 0;
case WM_KEYDOWN:
switch ( wParam)
{
case VK_ESCAPE:
PostQuitMessage(0);
return 0;
}
return 0;
default:
return DefWindowProc ( hWnd, message, wParam, lParam);
}
}
void EnableOpenGL ( HWND hWnd, HDC *hDC, HGLRC *hRC)
{
PIXELFORMATDESCRIPTOR pfd;
int iFormat;
*hDC = GetDC ( hWnd);
ZeroMemory ( &, sizeof ( pfd));
pfd.nSize = sizeof ( pfd);
pfd.nVersion = 1;
pfd.dwFlags = PFD_DRAW_TO_WINDOW |
PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.cColorBits = 24;
pfd.cDepthBits = 16;
pfd.iLayerType = PFD_MAIN_PLANE;
iFormat = ChoosePixelFormat ( *hDC, &);
SetPixelFormat ( *hDC, iFormat, &);
*hRC = wglCreateContext( *hDC ) ;
wglMakeCurrent( *hDC, *hRC ) ;
}
void DisableOpenGL ( HWND hWnd, HDC hDC, HGLRC hRC)
{
wglMakeCurrent ( NULL, NULL);
wglDeleteContext ( hRC);
ReleaseDC ( hWnd, hDC);
}
lol, bonjour le copier/coller !
oui de mon programme
altonfrere, c moi qui ai fait ce programme...
ah bon ? ! lol,
tu peux m´expliquer quelques trucs car j´ai pas tout compris :
à quoi te sert la variable " theta" ? pourquoi ya marqué Sleep(1) à un moment donné ? que signifie " erreur de syntaxe" pour toi ?
dernière question : qu´as tu réellement compris dans toutes ces lignes que tu viens de nous écrire ( ton source ressemble étrangement à un exemple classique opengl . .. tu aurais au moins pu changer le titre de la fenêtre)
ok:
il y a deux théta: celui de forme de rotation et l´autre de vitesse de rotassion.
Sinon, j´ai a peut près tut compris tu sais...
Sinon ce n´est pas un " exemple calssique Open GL" mais mon programme.
Ensuite, si tu ne me crois pas donne moi ton MSN... Si tu l´as, sinon AIM...
Oups, j´ai oublier:
Sleep(1) est la vitesse d´accelération/décélération de la figure ( ici un polygone) à un certin moment. Si par exemple je met Sleep(1000) la figure ne va quaziment plus bougé sinon par des petits coup sec.
ah d´accord ok . ..
![]()
( ah lala ces jeunes . ..)
Ouais mais bon pour infos Calcul, tu es partit d´un exemple pour faire ce programme, et on voit que c´est QUASI du cop/coll tu as meme pas eu liD de changer le nom dla window :s
> " GLSample", " OpenGL Sample",
bah ca encore c´est pas le plus grave . .. mais utiliser Sleep pour contrôler la vitesse de rotation, aie aie ! si seulement il savait a quoi sert cette instruction !
enfin, j´ai abandonné il y a un bon moment . ..
Pfffff! Vous etes trop nul! Un Sleep c´est un sous vetement qu´on se met autour de la Beet!
Dino
The Zythum Project
http://www.zythum-project.com
PTDR ![]()
lol
Sleep ça sert pas a ralentir les polygones, ça sert a arreter le programme, le faire dormir ![]()
C pur ça que C plus lent !
Calculator, je te conseille de bien maitriser le C/C++ avant de te lancer sur OpenGL.
non, la je vais continuer...
Comme tu veux, c´était juste un conseil.
Je suis conscient qu´il est frustrant de ne faire que du mode console ( on est tous passés par là
)
Cependant, tu risque de ne pas comprendre cerataines ( beaucoup même vu que tu débute en C je crois ) choses.
Tu sais comment j´ai appris le C?? J´ai pris un code, et je l´ai décomposer pour le comprendre. Je fais al mêmee chose avec le mode graphique et sa marche. J´ai déjà fais queqleus petits trucs mararant.
glRotatef ( theta, 0.0f, 0.0f, 0.0f);
tu m´explique ce que fait cette fonction? ; )
pcq j´ai encore jamais vu de rotation autour d´un vecteur nul.
Je ne conteste nullement cette métode, je l´employe moi même couramment ( lire du source c´est très bien et sa permet d´apprendre ) , mais sais tu ( très) bien te servir des pointeurs par exemple ? On s´en sert pas mal dans OpenGL.
Le problème je pense c´est que tu veux tout faire tout de suite ( bon c´est normal).
Mais t´as commencer à programmer en C il y a quelques semaines, il y a quelques jours tu annoncais que tu avais créé un site web visant à créer d´autre sites moyennant rémunération et la tu te lance dans OpenGL.
Si ca marche, c´est bien mais moi tout cela m´a l´air un peu . .. précoce ?
Je ne me suis mis à OpenGL qu´environ un an après avoir débuté le C pour bien posséder toutes les bases.
Mais fait le comme tu le sens.
regarde, tu le dis toi même fait le comme tu le sens. C bien ce que je compte faire, et la ni les vannes d´altonfrère, ni les insulte de rei, ni les morales de JY² ne m´arreterons.