Tuesday, 26 April 2016

Membuat Program OpenGL Dengan Code Blocks

Cara membuat program OpenGL dengan menggunakan compiler code blocks.
Bagi yang belumpunya Code Blocks bisa kesini dan cara installnya.



Untuk membuat program OpenGL dengan code blocks caranya sangat mudah, karena code blocks telah menyediakan fasilitas tersebut.

Pertama jalankan code blocks di komputer Anda.


Lalu klik File, pilih New dan Project. Atau Anda dapat langsung klik Create new project (yang bergaris bawah).


Setelah itu pilih OpenGL project, lalu klik tombol Go.

Klik tombol Next.
Beri nama project (Project title), lalu pilih lokasi folder tempat project akan diletakkan, Anda dapat gunakan tombol (no. 3) untuk browse folder di komputer Anda. Lalu klik tombol Next.
Klik tombol Finish.
Maka Anda akan mendapatkan hasil seperti gambar di bawah ini. Klik  tanda plus (+) pada Sources.
Lalu klik dua kali pada main.c.
Maka kode program OpenGL akan ditampilkan seperti yang Anda lihat pada gambar di bawah ini. Klik tombol Build and run (no. 2) untuk menjalankan program.
Hasil dari program dapat Anda lihat seperti gambar di bawah ini.
Untuk memudahkan Anda belajar berikut ini adalah listing / kode program OpenGL  dengan code block, coba bandingkan dengan kode program di artikel ini (dengan Visual Studio 2013 Express).
#include <windows.h>
#include <gl/gl.h>

LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM);
void EnableOpenGL(HWND hwnd, HDC*, HGLRC*);
void DisableOpenGL(HWND, HDC, HGLRC);


int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine,
                   int nCmdShow)
{
    WNDCLASSEX wcex;
    HWND hwnd;
    HDC hDC;
    HGLRC hRC;
    MSG msg;
    BOOL bQuit = FALSE;
    float theta = 0.0f;

    /* register window class */
    wcex.cbSize = sizeof(WNDCLASSEX);
    wcex.style = CS_OWNDC;
    wcex.lpfnWndProc = WindowProc;
    wcex.cbClsExtra = 0;
    wcex.cbWndExtra = 0;
    wcex.hInstance = hInstance;
    wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
    wcex.lpszMenuName = NULL;
    wcex.lpszClassName = "GLSample";
    wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION);;


    if (!RegisterClassEx(&wcex))
        return 0;

    /* create main window */
    hwnd = CreateWindowEx(0,
                          "GLSample",
                          "OpenGL Sample",
                          WS_OVERLAPPEDWINDOW,
                          CW_USEDEFAULT,
                          CW_USEDEFAULT,
                          256,
                          256,
                          NULL,
                          NULL,
                          hInstance,
                          NULL);

    ShowWindow(hwnd, nCmdShow);

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

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
        case WM_CLOSE:
            PostQuitMessage(0);
        break;

        case WM_DESTROY:
            return 0;

        case WM_KEYDOWN:
        {
            switch (wParam)
            {
                case VK_ESCAPE:
                    PostQuitMessage(0);
                break;
            }
        }
        break;

        default:
            return DefWindowProc(hwnd, uMsg, wParam, lParam);
    }

    return 0;
}

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

void DisableOpenGL (HWND hwnd, HDC hDC, HGLRC hRC)
{
    wglMakeCurrent(NULL, NULL);
    wglDeleteContext(hRC);
    ReleaseDC(hwnd, hDC);
}


Sampai disini akhir artikel kali ini semoga bermanfaat.


Sumber
Previous Post
Next Post

post written by:

3 comments:

  1. ini apa sih gan? ane ga ngerti :(

    ReplyDelete
  2. makasih min ilmunya sngt top dan bermanfaat

    ReplyDelete
  3. http://agendominocamarqq.blogspot.com/2017/05/membahas-perkembangan-perjudian-online.html
    http://agendominocamar.blogspot.com/2017/05/mengetahui-5-dewa-judi-paling-terkenal.html
    http://agendomino99camarqq.blogspot.com/2017/05/mengetahui-tentang-dapatkah-agen-judi.html
    http://agenbandarqcamarqq.blogspot.com/2017/05/membahas-asal-usul-permainan-judi.html
    http://camaragenbandarq.blogspot.com/2017/05/mengetahui-sejarah-judi-legal-di.html
    http://camarbandarq.com
    http://camardominoqq.com
    http://qqcamar.com

    ReplyDelete

Jaga bahasa ketika berkomentar disini,terima kasih