Minggu, 28 November 2010

Membuat Obyek 2D dengan menggunakan Pelles C

Implementasi Kode Program :

#include
#include
#include
#include

void mulaiOpenGL(void);

int main(void)
{
    //
    // mRunning = TRUE, aplikasi masih berjalan
    // mRunning = FALSE, ??? :p
    GLuint mRunning = GL_TRUE;

    //
    // inisialisasi GLFW
    if( glfwInit() == GL_FALSE )
    {
        MessageBox( NULL, "ERROR :: gagal menginisialisasi GLFW", "Error!", MB_OK);
        return(0);
    }
    //
    // buat sebuah window yang akan digunakan untuk menggambar.
    if( glfwOpenWindow( 640, 480, 0, 0, 0, 0, 24, 0, GLFW_WINDOW ) == GL_FALSE )
    {
        MessageBox( NULL, "ERROR :: gagal membuat window", "Error!", MB_OK );
        glfwTerminate();
        return(0);
    }
    //
    // Set judul yang ada di window dan Swap interval.
    glfwSetWindowTitle( "Praktikum Grafik Komputer LabTI" );
    glfwSwapInterval( 1 );
    //
    // mulai OpenGL (melakukan setting awal OpenGL)
    mulaiOpenGL();
    //
    // mulai looping utama program
    while( mRunning )
    {
        //
        // bersihkan layar dan depth buffer
        glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
        glLoadIdentity();
        gluLookAt(0.0,0.0,10.0,0.0,0.0,0.0,0.0,10.0,0.0);
        //
        // lakukan penggambaran di sini
        //------------------------------------------------------------------------------------
   

   
        glRotatef(45.0f,0.0f,0.0f,1.0f);
        glTranslatef(1.0f,1.0f,0.0f);
        glScalef(1.1f,1.3f,0.0f);

        glBegin(GL_QUADS);
        glColor3f(1.0, 0.0, 0.0);
        glVertex3f(-1.0f, 1.0f, 0.0f);   
        glColor3f(0.0, 0.0, 0.0);
        glVertex3f( 1.0f, 1.0f, 0.0f);
        glColor3f(0.0, 1.0, 0.0);
        glVertex3f( 1.0f,-1.0f, 0.0f);   
        glColor3f(0.0, 0.0, 1.0);
        glVertex3f(-1.0f,-1.0f, 0.0f);
        glEnd();

        glBegin(GL_QUADS);
        glColor3f(1.0, 1.0, 1.0);
        glVertex3f(-5.0f, 4.0f, 0.0f);   
        glColor3f(0.0, 1.0, 1.0);
        glVertex3f( -3.0f, 4.0f, 0.0f);
        glColor3f(1.0, 1.0, 0.0);
        glVertex3f( -3.0f,2.0f, 0.0f);   
        glColor3f(0.0, 0.0, 0.0);
        glVertex3f(-5.0f,2.0f, 0.0f);
        glEnd();
       
        glBegin(GL_QUADS);
        glColor3f(1.0, 1.0, 0.0);
        glVertex3f(3.0f, 4.0f, 0.0f);   
        glColor3f(0.0, 0.0, 0.0);
        glVertex3f(5.0f, 4.0f, 0.0f);
        glColor3f(0.0, 1.0, 0.0);
        glVertex3f(5.0f,2.0f, 0.0f);   
        glColor3f(0.0, 0.0, 1.0);
        glVertex3f(3.0f,2.0f, 0.0f);
        glEnd();
       
        glBegin(GL_QUADS);
        glColor3f(1.0, 0.0, 1.0);
        glVertex3f(3.0f, -2.0f, 0.0f);   
        glColor3f(1.0, 2.0, 1.0);
        glVertex3f(5.0f, -2.0f, 0.0f);
        glColor3f(0.0, 1.0, 1.0);
        glVertex3f(5.0f,-4.0f, 0.0f);   
        glColor3f(1.0, 1.0, 1.0);
        glVertex3f(3.0f,-4.0f, 0.0f);
        glEnd();

        glBegin(GL_QUADS);
        glColor3f(1.0, 0.0, 0.0);
        glVertex3f(-3.0f, -2.0f, 0.0f);   
        glColor3f(2.0, 1.0, 2.0);
        glVertex3f( -5.0f, -2.0f, 0.0f);
        glColor3f(1.0, 0.0, 1.0);
        glVertex3f(-5.0f,-4.0f, 0.0f);   
        glColor3f(0.0, 0.0, 1.0);
        glVertex3f(-3.0f,-4.0f, 0.0f);
        glEnd();

        glBegin( GL_LINES );
            glColor3f(2.0,2.0,2.0);
            glVertex3f(-1.0f, 1.0f, 0.0f );
            glVertex3f( -3.0f,2.0f, 0.0f );
        glEnd();
        glBegin( GL_LINES );
            glColor3f(2.0,2.0,2.0);
            glVertex3f(1.0f, 1.0f, 0.0f );
            glVertex3f( 3.0f,2.0f, 0.0f );
        glEnd();
       
        glBegin( GL_LINES );
            glColor3f(2.0,2.0,2.0);
            glVertex3f(1.0f,-1.0f, 0.0f );
            glVertex3f( 3.0f,-2.0f, 0.0f );
        glEnd();
           
        glBegin( GL_LINES );
            glColor3f(2.0,2.0,2.0);
            glVertex3f(-1.0f, -1.0f, 0.0f );
            glVertex3f( -3.0f,-2.0f, 0.0f );
        glEnd();
        //------------------------------------------------------------------------------------
        //
        // tampilkan ke layar (swap double buffer)
        glfwSwapBuffers();

        //
        // check input , apakah tombol esc ditekan atau tombol "close" diclick
        mRunning = !glfwGetKey( GLFW_KEY_ESC ) && glfwGetWindowParam( GLFW_OPENED );
    }

    glfwTerminate();
    return(0);
}

void mulaiOpenGL(void)
{
    //
    // Set viewport ke resolusi 640x480 viewport bisa diibaratkan
    // layar monitor anda
    glViewport( 0, 0, 640, 480 );
    //
    // Set mode OpenGL ke mode pryeksi (Projection) dan set proyeksi
    // menggunakan proyeksi perspective, dengan sudut pandang (Field Of
    // View) 60 derajat
    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
    gluPerspective( 60.0f, 640.0f/480.0f, 0.1f, 1000.0f );

    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity();
    //
    // Set mode gradasi warna halus (Smooth)
    glShadeModel( GL_SMOOTH );
    //
    // warna yang digunakan untuk membersihkan layar
    glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );
    //
    // nilai untuk membersihkan depth buffer.
    glClearDepth( 1.0f );
    //
    // Depth test digunakan untuk menghindari polygon yang
    // tumpang tindih.
    glEnable( GL_DEPTH_TEST );
    glDepthFunc( GL_LEQUAL );
    //
    // beritahu OpenGL untuk menggunakan perhitungan perspective
    // yang terbaik (perhitungan ini tidak bisa selalu 100% akurat)
    glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );
}

Penjelasan Program :
 
Pada program ini, dibuat gambar obyek geometri dengan menggunakan 5 buah kotak yang setiap kotak kita hubungkan dengan garis. Peletakkannya yaitu 1 buah kotak ditengah, 2 buah kotak diatas, dan 2 buah kotak dibawah. Untuk menghubungkan kotak, kita buat 4 buah garis yang dimana setiap garis menempati 4 buah sudut yang ada di kotak pertama yang berada ditengah dihubungkan dengan salah satu sudut 4 kotak lainnya ( dapat dilihat pada gambar output). Berikut ini akan dijelaskan logika program mengenai pembuatan obyeknya.

a. Membuat obyek kotak ke – 1 yang berada ditengah.

Kode program :
        glBegin(GL_QUADS);
        glColor3f(1.0, 0.0, 0.0);
        glVertex3f(-1.0f, 1.0f, 0.0f);   
        glColor3f(0.0, 0.0, 0.0);
        glVertex3f( 1.0f, 1.0f, 0.0f);
        glColor3f(0.0, 1.0, 0.0);
        glVertex3f( 1.0f,-1.0f, 0.0f);   
        glColor3f(0.0, 0.0, 1.0);
        glVertex3f(-1.0f,-1.0f, 0.0f);
        glEnd();


Kode program diatas digunakan untuk membuat kotak ke – 1 yang diletakkan di posisi tengah. Karena kita membuat obyek kotak, maka kita gunakan statement GL_QUADS. Untuk memulai pembuatan kotak kita gunakan statement glBegin dimana didalamnya terdapat parameter yaitu GL_QUADS. Karena GL_QUADS ini merupakan sintaks geometri untuk obyek kotak. Kemudian, kita letakkan titik sudut pertama pada koordinat x = -1 dan y = 1. Selanjutnya, kita letakkan titik sudut berikutnya yaitu pada koordinat x = 1 dan y = 1. Lalu, kita letakkan sudut berikutnya pada koordinat x = 1 dan y = -1. Kemudian, koordinat sudut yang terakhir kita letakkan pada titik x = -1 dan y = -1.  Kita gunakan statement glColor untuk menciptakan dan memberikan sentuhan warna pada obyek tersebut. Untuk mengakhiri pembuatan obyek kita gunakan statement glEnd().

b. Membuat obyek kotak ke – 2 yang berada pojok kiri atas. 
Kode program :
        glBegin(GL_QUADS);
        glColor3f(1.0, 1.0, 1.0);
        glVertex3f(-5.0f, 4.0f, 0.0f);   
        glColor3f(0.0, 1.0, 1.0);
        glVertex3f( -3.0f, 4.0f, 0.0f);
        glColor3f(1.0, 1.0, 0.0);
        glVertex3f( -3.0f,2.0f, 0.0f);   
        glColor3f(0.0, 0.0, 0.0);
        glVertex3f(-5.0f,2.0f, 0.0f);
        glEnd();


Kode program diatas digunakan untuk membuat kotak ke – 2 yang diletakkan di posisi pojok kiri atas. Karena kita membuat obyek kotak, maka kita gunakan statement GL_QUADS. Untuk memulai pembuatan kotak kita gunakan statement glBegin dimana didalamnya terdapat parameter yaitu GL_QUADS. Karena GL_QUADS ini merupakan sintaks geometri untuk obyek kotak. Kemudian, kita letakkan titik sudut pertama pada koordinat x = -5 dan y = 4. Selanjutnya, kita letakkan titik sudut berikutnya yaitu pada koordinat x = -3 dan y = 4. Lalu, kita letakkan sudut berikutnya pada koordinat x = -3 dan y = 2. Kemudian, koordinat sudut yang terakhir kita letakkan pada titik x = -5 dan y = 2.  Kita gunakan statement glColor untuk menciptakan dan memberikan sentuhan warna pada obyek tersebut. Untuk mengakhiri pembuatan obyek kita gunakan statement glEnd().

c. Membuat obyek kotak ke – 3 yang berada pojok kanan atas.
Kode program :
        glBegin(GL_QUADS);
        glColor3f(1.0, 1.0, 0.0);
        glVertex3f(3.0f, 4.0f, 0.0f);   
        glColor3f(0.0, 0.0, 0.0);
        glVertex3f(5.0f, 4.0f, 0.0f);
        glColor3f(0.0, 1.0, 0.0);
        glVertex3f(5.0f,2.0f, 0.0f);   
        glColor3f(0.0, 0.0, 1.0);
        glVertex3f(3.0f,2.0f, 0.0f);
        glEnd();


Kode program diatas digunakan untuk membuat kotak ke – 3 yang diletakkan di posisi pojok kanan atas. Karena kita membuat obyek kotak, maka kita gunakan statement GL_QUADS. Untuk memulai pembuatan kotak kita gunakan statement glBegin dimana didalamnya terdapat parameter yaitu GL_QUADS. Karena GL_QUADS ini merupakan sintaks geometri untuk obyek kotak. Kemudian, kita letakkan titik sudut pertama pada koordinat x = 3 dan y = 4. Selanjutnya, kita letakkan titik sudut berikutnya yaitu pada koordinat x = 5 dan y = 4. Lalu, kita letakkan sudut berikutnya pada koordinta x = 5 dan y = 2. Kemudian, koordinat sudut yang terakhir kita letakkan pada titik x = 3 dan y = 2.  Kita gunakan statement glColor untuk menciptakan dan memberikan sentuhan warna pada obyek tersebut. Untuk mengakhiri pembuatan obyek kita gunakan statement glEnd().

d. Membuat obyek kotak ke – 4 yang berada pojok kanan bawah.
Kode program :
        glBegin(GL_QUADS);
        glColor3f(1.0, 0.0, 1.0);
        glVertex3f(3.0f, -2.0f, 0.0f);   
        glColor3f(1.0, 2.0, 1.0);
        glVertex3f(5.0f, -2.0f, 0.0f);
        glColor3f(0.0, 1.0, 1.0);
        glVertex3f(5.0f,-4.0f, 0.0f);   
        glColor3f(1.0, 1.0, 1.0);
        glVertex3f(3.0f,-4.0f, 0.0f);
        glEnd();


Kode program diatas digunakan untuk membuat kotak ke – 4 yang diletakkan di posisi pojok kanan bawah. Karena kita membuat obyek kotak, maka kita gunakan statement GL_QUADS. Untuk memulai pembuatan kotak kita gunakan statement glBegin dimana didalamnya terdapat parameter yaitu GL_QUADS. Karena GL_QUADS ini merupakan sintaks geometri untuk obyek kotak. Kemudian, kita letakkan titik sudut pertama pada koordinat x = 3 dan y = -2. Selanjutnya, kita letakkan titik sudut berikutnya yaitu pada koordinat x = 5 dan y = -2. Lalu, kita letakkan sudut berikutnya pada koordinat x = 5 dan y = -4. Kemudian, koordinat sudut yang terakhir kita letakkan pada titik x = 3 dan y = -4.  Kita gunakan statement glColor untuk menciptakan dan memberikan sentuhan warna pada obyek tersebut. Untuk mengakhiri pembuatan obyek kita gunakan statement glEnd().

e. Membuat obyek kotak ke – 5 yang berada pojok kiri bawah.
Kode program :
        glBegin(GL_QUADS);
        glColor3f(1.0, 0.0, 0.0);
        glVertex3f(-3.0f, -2.0f, 0.0f);   
        glColor3f(2.0, 1.0, 2.0);
        glVertex3f( -5.0f, -2.0f, 0.0f);
        glColor3f(1.0, 0.0, 1.0);
        glVertex3f(-5.0f,-4.0f, 0.0f);   
        glColor3f(0.0, 0.0, 1.0);
        glVertex3f(-3.0f,-4.0f, 0.0f);
        glEnd();


Kode program diatas digunakan untuk membuat kotak ke – 5 yang diletakkan di posisi pojok kiri bawah. Karena kita membuat obyek kotak, maka kita gunakan statement GL_QUADS. Untuk memulai pembuatan kotak kita gunakan statement glBegin dimana didalamnya terdapat parameter yaitu GL_QUADS. Karena GL_QUADS ini merupakan sintaks geometri untuk obyek kotak. Kemudian, kita letakkan titik sudut pertama pada koordinat x = -3 dan y = -2. Selanjutnya, kita letakkan titik sudut berikutnya yaitu pada koordinat x = -5 dan y = -2. Lalu, kita letakkan sudut berikutnya pada koordinat x = -5 dan y = -4. Kemudian, koordinat sudut yang terakhir kita letakkan pada titik x = -3 dan y = -4.  Kita gunakan statement glColor untuk menciptakan dan memberikan sentuhan warna pada obyek tersebut. Untuk mengakhiri pembuatan obyek kita gunakan statement glEnd().

f. Membuat obyek garis ke – 1 ( menghubungkan kotak yang ditengah dengan kotak yang ada di pojok kiri atas ).
Kode program :
            glBegin( GL_LINES );
            glColor3f(2.0,2.0,2.0);
            glVertex3f(-1.0f, 1.0f, 0.0f );
            glVertex3f( -3.0f,2.0f, 0.0f );
            glEnd();


Kode program diatas digunakan untuk membuat garis ke – 1 yang menghubungkan antara kotak yang berada di tengah dengan kotak yang berada di pojok kiri atas. Karena kita membuat obyek garis, maka kita gunakan statement GL_LINES. Untuk memulai pembuatan kotak kita gunakan statement glBegin dimana didalamnya terdapat parameter yaitu GL_LINES. Karena GL_LINES ini merupakan sintaks geometri untuk obyek garis. Kemudian, kita letakkan titik awal garis pada koordinat x = -1 dan y = 1. Selanjutnya, kita letakkan titik ujung atau pangkalnya pada koordinat x = -3 dan y = 2. Kita gunakan statement glColor untuk menciptakan dan memberikan sentuhan warna pada obyek tersebut. Untuk mengakhiri pembuatan obyek kita gunakan statement glEnd().

g. Membuat obyek garis ke – 2 ( menghubungkan kotak yang ditengah dengan kotak yang ada di pojok kanan atas ).
Kode program :
            glBegin( GL_LINES );
            glColor3f(2.0,2.0,2.0);
            glVertex3f(1.0f, 1.0f, 0.0f );
            glVertex3f( 3.0f,2.0f, 0.0f );
            glEnd();

Kode program diatas digunakan untuk membuat garis ke – 2 yang menghubungkan antara kotak yang berada di tengah dengan kotak yang berada di pojok kanan atas. Karena kita membuat obyek garis, maka kita gunakan statement GL_LINES. Untuk memulai pembuatan kotak kita gunakan statement glBegin dimana didalamnya terdapat parameter yaitu GL_LINES. Karena GL_LINES ini merupakan sintaks geometri untuk obyek garis. Kemudian, kita letakkan titik awal garis pada koordinat x = 1 dan y = 1. Selanjutnya, kita letakkan titik ujung atau pangkalnya pada koordinat x = 3 dan y = 2. Kita gunakan statement glColor untuk menciptakan dan memberikan sentuhan warna pada obyek tersebut. Untuk mengakhiri pembuatan obyek kita gunakan statement glEnd().

h. Membuat obyek garis ke – 3 ( menghubungkan kotak yang ditengah dengan kotak yang ada di pojok kanan bawah ).
Kode program :
            glBegin( GL_LINES );
            glColor3f(2.0,2.0,2.0);
            glVertex3f(1.0f,-1.0f, 0.0f );
            glVertex3f( 3.0f,-2.0f, 0.0f );
            glEnd();
           

Kode program diatas digunakan untuk membuat garis ke – 3 yang menghubungkan antara kotak yang berada di tengah dengan kotak yang berada di pojok kanan bawah. Karena kita membuat obyek garis, maka kita gunakan statement GL_LINES. Untuk memulai pembuatan kotak kita gunakan statement glBegin dimana didalamnya terdapat parameter yaitu GL_LINES. Karena GL_LINES ini merupakan sintaks geometri untuk obyek garis. Kemudian, kita letakkan titik awal garis pada koordinat x = 1 dan y = -1. Selanjutnya, kita letakkan titik ujung atau pangkalnya pada koordinat x = 3 dan y = -2. Kita gunakan statement glColor untuk menciptakan dan memberikan sentuhan warna pada obyek tersebut. Untuk mengakhiri pembuatan obyek kita gunakan statement glEnd().

i. Membuat obyek garis ke – 4 ( menghubungkan kotak yang ditengah dengan kotak yang ada di pojok kiri bawah ).
Kode program :
       glBegin( GL_LINES );
            glColor3f(2.0,2.0,2.0);
            glVertex3f(-1.0f, -1.0f, 0.0f );
            glVertex3f( -3.0f,-2.0f, 0.0f );
        glEnd();
          

Kode program diatas digunakan untuk membuat garis ke – 4 yang menghubungkan antara kotak yang berada di tengah dengan kotak yang berada di pojok kiri bawah. Karena kita membuat obyek garis, maka kita gunakan statement GL_LINES. Untuk memulai pembuatan kotak kita gunakan statement glBegin dimana didalamnya terdapat parameter yaitu GL_LINES. Karena GL_LINES ini merupakan sintaks geometri untuk obyek garis. Kemudian, kita letakkan titik awal garis pada koordinat x = -1 dan y = -1. Selanjutnya, kita letakkan titik ujung atau pangkalnya pada koordinat x = -3 dan y = -2. Kita gunakan statement glColor untuk menciptakan dan memberikan sentuhan warna pada obyek tersebut. Untuk mengakhiri pembuatan obyek kita gunakan statement glEnd().

Tampilan Output Program :

Tidak ada komentar:

Posting Komentar