Computer Graphic – Home Transformation

Posted on Updated on

OpenGL

Computer Graphic (Grafika Komputer) merupakan salah satu bidang di computer science yang membahas tentang penerapan teknologi computing untuk membangun gambar atau realitas virtual pada komputer. Jadi kesimpulannya, kita bisa membuat gambar baik 2 dimensi maupun 3 dimensi menggunakan bahasa pemrograman (Baca : menggambar dengan cara menulis program).

Computer Graphic dapat diimplementasikan menggunakan library tertentu. Salah satu library yang banyak digunakan adalah OpenGL. Dengan OpenGL, kita dapat dengan mudah membuat gambar dengan library yang sudah disediakan. Untuk pengantar awal, kali ini saya akan menunjukkan contoh penerapan computer graphic. Kasus yang saya angka di sini adalah membangun sebuah rumah yang ditransformasikan 45 derajat searah jarum jam. Ilustrasinya kira-kira sebagai berikut :

HomeTransformation

Langkah-langkah yang digunakan untuk membangun rumah tersebut adalah menggunakan polygonal, dengan cara menghubungkan garis berdasarkan koordinat x dan y. Hal yang perlu diperhatikan adalah adanya cerobong di atas rumah. Pada implementasi yang saya lakukan, cerobong di atas atap tersebut masih bersinggungan dengan atap rumah yang berbentuk segitiga, jadi perlu dilakukan pemotongan objek dengan atap segitiga sebagai pemotongnya. Tetapi untuk saat ini, kita akan berkonsentrasi pada dasar-dasar membangun objek polygonal dan melakukan transformasi objek.

Source code yang saya gunakan untuk membangun objek di atas adalah sebagai berikut :

#include <windows.h>
#include<gl/gl.h>
#include<gl/glu.h>
#include<gl/glut.h>

//--------------- init screen --------------------------------------------------
void myInit(void){
    glClearColor(1.0, 1.0, 1.0,0.0);
    glColor3f(0.0f, 0.0f, 0.0f);
    glPointSize(2.0);
    glMatrixMode(GL_PROJECTION);
}

//--------------- setWindow ----------------------------------------------------
void setWindow(float left, float right, int bottom, int top){
    glClearColor(1.0, 1.0, 1.0,0.0);
    glColor3f(0.0f, 0.0f, 0.0f);
    glPointSize(2.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(left, right, bottom, top);
}

//---------------- setViewport -------------------------------------------------
void setViewport(int left, int bottom, int width, int height){
     glViewport(left, bottom, width, height);
}

//---------------- current transformation --------------------------------------
void initCT(void)
{
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
	glTranslated(500,500, 0.0);
	glRotated (-35, 0, 0, 1);
}

//---------------- drawing tower -----------------------------------------------
void tower (void){
     //bagian utama rumah
     glBegin(GL_LINE_STRIP);
       glVertex2i(10,10);
       glVertex2i(10,250);
       glVertex2i(180,250);
       glVertex2i(180,10);
       glVertex2i(10,10);
     glEnd();
     //atap utama
     glBegin(GL_LINE_STRIP);
       glVertex2i(10,250);
       glVertex2i(90,350);
       glVertex2i(180,250);
       glVertex2i(10,250);
     glEnd();
     //corong rumah
     glBegin(GL_LINE_STRIP);
       glVertex2i(140,275);
       glVertex2i(140,325);
       glVertex2i(160,325);
       glVertex2i(160,275);
       glVertex2i(140,275);
     glEnd();
     //pintu
     glBegin(GL_LINE_STRIP);
       glVertex2i(30,30);
       glVertex2i(30,120);
       glVertex2i(60,120);
       glVertex2i(60,30);
       glVertex2i(30,30);
     glEnd();
     //jendela
     glBegin(GL_LINE_STRIP);
       glVertex2i(120,160);
       glVertex2i(120,200);
       glVertex2i(160,200);
       glVertex2i(160,160);
       glVertex2i(120,160);
     glEnd();
     //bagian samping rumah
     glBegin(GL_LINE_STRIP);
       glVertex2i(180,10);
       glVertex2i(180,120);
       glVertex2i(350,120);
       glVertex2i(350,10);
       glVertex2i(180,10);
     glEnd();
     //atap samping rumah
     glBegin(GL_LINE_STRIP);
       glVertex2i(180,120);
       glVertex2i(180,200);
       glVertex2i(350,120);
       glVertex2i(180,120);
     glEnd();
     //jendela samping rumah
     glBegin(GL_LINE_STRIP);
       glVertex2i(250,70);
       glVertex2i(250,100);
       glVertex2i(300,100);
       glVertex2i(300,70);
       glVertex2i(250,70);
     glEnd();
}

//---------------- display -----------------------------------------------------
void myDisplay(void) {
     glClear(GL_COLOR_BUFFER_BIT);
         setWindow(0,1280,0,960);
         setViewport(0,0,640,480);
         tower();

         setViewport(0,0,640,480);
         initCT();
         tower();
     glFlush();
}

//---------------- main --------------------------------------------------------
int main(int argc, char** argv) {
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
	glutInitWindowSize(640, 480);
	glutInitWindowPosition(100, 150);
	glutCreateWindow("Rumah Transformasi");
	glutDisplayFunc(myDisplay);
	myInit();
	glutMainLoop();
}

Hasil dari source code di atas adalah sebagai berikut :

openGL-rumah-transformasi
OpenGl – Rumah Transformasi

IDE yang saya gunakan adalah Dev-CPP. Untuk, sebelum mengkompilasi source code, pastikan teman-teman sudah mengkonfigurasi Dev-CPP agar bisa digunakan untuk membangun aplikasi OpenGL. Langkah-langkahnya bisa dibaca di sini. Akhir kata, selamat belajar, semoga dengan ini muncul inspirasi baru dan ide kreatif dari teman-teman semua. Selamat Berkarya.. šŸ™‚

Iklan

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s