Programming C, C++, Java, PHP, Ruby, Turing, VB
Computer Science Canada 
Programming C, C++, Java, PHP, Ruby, Turing, VB  

Username:   Password: 
 RegisterRegister   
 Getting Started on OpenGL
Index -> Programming, C++ -> C++ Help
View previous topic Printable versionDownload TopicSubscribe to this topicPrivate MessagesRefresh page View next topic
Author Message
jamonathin




PostPosted: Tue Nov 22, 2005 12:11 pm   Post subject: Getting Started on OpenGL

Hey i was wondering how to get started with OpenGL programming. If anyone can submit like a basic program (with code) it'd help out a lot. I know you guys will probabily preach that I should master c++ before i move onto OpenGL, but . . yeah, anyways . . Razz.

If anyoen can help it'd be great, thanks Smile.
Sponsor
Sponsor
Sponsor
sponsor
jamonathin




PostPosted: Tue Nov 22, 2005 12:30 pm   Post subject: (No subject)

And I really dont know anything about it. As in, what program to write it in/compile it in. (i guess you can write it anywhere just dont know how to run it), and 0 OpenlGL commands. There's a [url="http://www.cprogramming.com/tutorial/gl6.html"]tutorial[/url] i found, but it doesn't say how to run it, and it doesn't work in Micosoft Visual C++ Confused . . .

P L E H
Geminias




PostPosted: Tue Nov 22, 2005 7:23 pm   Post subject: (No subject)

my suggestion is get a real compiler.. this code will work with MinGW or Dev-c++ since it uses the MinGW compiler.

c++:

/**************************
 * 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);
}
Geminias




PostPosted: Tue Nov 22, 2005 7:28 pm   Post subject: (No subject)

thats a pretty basic simple program.. one of the simplest you'll ever see in opengl aside from just drawing static objects on the screen.

see gandolfs spiel on compilers in the c++ tutorial section.

if you can't run c++ code, dont bother trying to learn opengl. If you want some graphics for some GUI's or something use winAPI and VC++.. thats much simpler.
wtd




PostPosted: Tue Nov 22, 2005 7:32 pm   Post subject: (No subject)

Geminias: that assumes that portability is not a high priority. Some of us don't like being limited to Windows.
Geminias




PostPosted: Tue Nov 22, 2005 7:39 pm   Post subject: (No subject)

true winAPI would be limiting to windows only as it uses the win32.dll... if you dont like being limited to windows dont use anything made by microsoft and dont use anything that starts with "win"
jamonathin




PostPosted: Wed Nov 23, 2005 10:33 am   Post subject: (No subject)

Thanks for your help Geminias Smile.
Mazer




PostPosted: Wed Nov 23, 2005 3:11 pm   Post subject: (No subject)

Geminias wrote:
true winAPI would be limiting to windows only as it uses the win32.dll... if you dont like being limited to windows dont use anything made by microsoft and dont use anything that starts with "win"

I'd like to see how you clean your glass surfaces without using windex whilst programming in OpenGL! Confused
Sponsor
Sponsor
Sponsor
sponsor
Geminias




PostPosted: Wed Nov 23, 2005 4:50 pm   Post subject: (No subject)

water and vinegar is the linux user alternative (note: how water and vinegar works much better)
md




PostPosted: Wed Nov 23, 2005 8:29 pm   Post subject: (No subject)

Also note that anything that compiles in MinGW or Dev-C++ should also compile in MSVC++, or even on linux using the appropriate libraries. The code posted *might* even run on linux under wine. For truely portable code I'd recomend checking out SDL, though it might take a bit to figure it out at the same time as openGL it's almost guarunteed to be portable.
wtd




PostPosted: Wed Nov 23, 2005 8:41 pm   Post subject: (No subject)

Cornflake wrote:
Also note that anything that compiles in MinGW or Dev-C++ should also compile in MSVC++


Assuming we're not talking about MSVC++ 6. That's not always a safe assumption as academic institutions seem to have a perverse love of pointlessly outdated software.
Display posts from previous:   
   Index -> Programming, C++ -> C++ Help
View previous topic Tell A FriendPrintable versionDownload TopicSubscribe to this topicPrivate MessagesRefresh page View next topic

Page 1 of 1  [ 11 Posts ]
Jump to:   


Style:  
Search: