[C++] OpenGL programming

Started by
7 comments, last by Cromulent 15 years, 9 months ago
Where would be a good place to start learning to use OpenGL. I have tried NeHe's tutorials but the DevC++ version won't compile. It complained about not having GLaux so I got the replacer thingo but the code still doesn't compile. Is there another good website for OpenGL or can someone tell me what I'm doing wrong with NeHe's tutorials? At the moment, I am trying to make sense of this: [codebox]/************************** * Includes * **************************/ #include <windows.h> #include <gl/gl.h> /************************** * Function Declarations * **************************/ 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); /************************** * WinMain * **************************/ 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; /* register window class */ 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 (&wc); /* create main window */ hWnd = CreateWindow ( "GLSample", "OpenGL Sample", WS_CAPTION | WS_POPUPWINDOW | WS_VISIBLE, 0, 0, 256, 256, NULL, NULL, hInstance, NULL); /* enable OpenGL for the window */ EnableOpenGL (hWnd, &hDC, &hRC); /* program main loop */ while (!bQuit) { /* check for messages */ if (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE)) { /* handle or dispatch messages */ if (msg.message == WM_QUIT) { bQuit = TRUE; } else { TranslateMessage (&msg); DispatchMessage (&msg); } } else { /* OpenGL animation code goes here */ glClearColor (0.0f, 0.0f, 0.0f, 0.0f); glClear (GL_COLOR_BUFFER_BIT); glPushMatrix (); glRotatef (theta, 0.0f, 0.0f, 1.0f); glBegin (GL_TRIANGLES); glColor3f (1.0f, 0.0f, 0.0f); glVertex2f (0.0f, 1.0f); glColor3f (0.0f, 1.0f, 0.0f); glVertex2f (0.87f, -0.5f); glColor3f (0.0f, 0.0f, 1.0f); glVertex2f (-0.87f, -0.5f); glEnd (); glPopMatrix (); SwapBuffers (hDC); theta += 1.0f; Sleep (1); } } /* shutdown OpenGL */ DisableOpenGL (hWnd, hDC, hRC); /* destroy the window explicitly */ DestroyWindow (hWnd); return msg.wParam; } /******************** * Window Procedure * ********************/ 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); } } /******************* * Enable OpenGL * *******************/ void EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC) { PIXELFORMATDESCRIPTOR pfd; int iFormat; /* get the device context (DC) */ *hDC = GetDC (hWnd); /* set the pixel format for the DC */ ZeroMemory (&pfd, 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, &pfd); SetPixelFormat (*hDC, iFormat, &pfd); /* create and enable the render context (RC) */ *hRC = wglCreateContext( *hDC ); wglMakeCurrent( *hDC, *hRC ); } /****************** * Disable OpenGL * ******************/ void DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC) { wglMakeCurrent (NULL, NULL); wglDeleteContext (hRC); ReleaseDC (hWnd, hDC); } [/codebox]
-----------------------My site: http://homicidalproductions.webs.comHave a look!
Advertisement
Get the OpenGL "Red Book"

here

or You can try


here

[Edited by jpetrie: Fixed links breaking forum width]

[Edited by - jpetrie on July 28, 2008 11:16:02 AM]
Or try another version of nehe's code. Most of the tutorials have about 7 gagillioin different languages/libraries/operating systems that they've been ported too. Try the SDL version. Or the glut version. Or the python version. Or...
Personally I think all that windows code clouds it up. I would use GLUT for learning OpenGL (I did), it's a really easy and portable window API. Then you can concentrate on OpenGL and not some old strange microsoft windows API (It's really funny how bad their naming-convention was).
A good place for learning to use OpenGL(with GLUT): http://videotutorialsrock.com/.
I'll have a looky at that GLUT then
-----------------------My site: http://homicidalproductions.webs.comHave a look!
I'll have a looky at that GLUT then
-----------------------My site: http://homicidalproductions.webs.comHave a look!
To be honest i'd learn from the OpenGL "Red book"

http://glprogramming.com/red/

and the openGL "Blue Book"

http://glprogramming.com/blue/

they are both v.good reference books and are free to look at online
Quote:Original post by Tom L
To be honest i'd learn from the OpenGL "Red book"

http://glprogramming.com/red/

and the openGL "Blue Book"

http://glprogramming.com/blue/

they are both v.good reference books and are free to look at online


Yeah, but don't use the old versions linked above. Buy the book the ones linked above are over 10 years old and make no mention of the newer technology that is becoming standard in graphics now such as pixel and vertex shaders.

This topic is closed to new replies.

Advertisement