Header Ads

  • Popular Posts

    Membuat Bentuk Bintang dan Titik Segi Empat Dengan Open GL

    https://havecode.blogspot.com/2018/04/membuat-bentuk-bintang-dan-titik-segi.html

    Hello Mamang Coder kali ini mau bagi bagi script tentang pemograman grafis nih, yang mimin buat adalah gambar bintang dan titik seperti gambar di atas sok langsung simak codenya

    /**************************
     * Includes
     *
     **************************/

    #include <windows.h> //header awal
    #include <gl/gl.h>//header awal


    /**************************
     * 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", "Ujian Praktek Punya Angga",//judul title bar
          WS_CAPTION | WS_POPUPWINDOW | WS_VISIBLE,
          0, 0, 600, 600,//ukuran windows
          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);
      glPointSize(5);//ukuran object
     
        glBegin(GL_POINTS); // membentuk titik persegi
    glVertex3f(0.2, 0.2, 0.0);// Titik koordinat Point
    glVertex3f(0.8, 0.2, 0.0);// Titik koordinat Point
    glVertex3f(0.2, 0.5, 0.0);// Titik koordinat Point
    glVertex3f(0.8, 0.5, 0.0);// Titik koordinat Point
    glVertex3f(0.2, 0.8, 0.0);// Titik koordinat Point
    glVertex3f(0.8, 0.8, 0.0);// Titik koordinat Point

    glEnd();

    glBegin(GL_TRIANGLES);    //membuat segitiga
      glVertex3f( 0.0f, 0.1f, 0.0f);  //titik koordinat
      glVertex3f( -0.1f,-0.1f, 0.0f); //titik koordinat
      glVertex3f( 0.1f,-0.1f, 0.0f); //titik koordinat


    glBegin(GL_TRIANGLES); 
      glVertex3f( -0.1f, -0.1f, 0.0f); //titik koordinat
      glVertex3f( -0.3f,-0.12f, 0.0f); //titik koordinat
      glVertex3f( -0.1f,-0.36f, 0.0f);//titik koordinat

    glBegin(GL_TRIANGLES);     
      glVertex3f( -0.14f, -0.3f, 0.0f); //titik koordinat
      glVertex3f( -0.22f,-0.55f, 0.0f);     //titik koordinat
      glVertex3f( 0.0f,-0.4f, 0.0f);//titik koordinat


      glBegin(GL_TRIANGLES);     
      glVertex3f( 0.0f, -0.4f, 0.0f); //titik koordinat
      glVertex3f( 0.22f,-0.55f, 0.0f);     //titik koordinat
      glVertex3f( 0.14f,-0.3f, 0.0f);//titik koordinat


      glBegin(GL_TRIANGLES);     
      glVertex3f( 0.14f, -0.3f, 0.0f);//titik koordinat
      glVertex3f( 0.3f, -0.12f, 0.0f);    //titik koordinat
      glVertex3f( 0.1f, -0.1f, 0.0f);//titik koordinat
    glEnd();


    glBegin(GL_QUADS);     //Membuat persegi 
      glVertex3f( 0.1f, -0.1f, 0.0f);//titik koordinat
      glVertex3f( -0.1f, -0.1f, 0.0f);//titik koordinat
      glVertex3f( -0.16f, -0.4f, 0.0f);     //titik koordinat
      glVertex3f( 0.16f, -0.4f, 0.0f);     //titik koordinat
    glEnd();
    glFlush();

             

                SwapBuffers (hDC);
            }
        }

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

    No comments