Laporan Grafkom OpenGL

download Laporan Grafkom OpenGL

of 18

description

laporan mengenai penggunaan OpenGL sebagai pendeskripsi scene yang mengeluarkan koleksi perintah khusus atau executable ke sistem operasi.

Transcript of Laporan Grafkom OpenGL

BAB ITUJUAN DAN LANDASAN TEORI

1.1. Tujuan1. Mahasiswa mampu melakukan pengolahan citra menggunakan bahasa pemrograman C++2. Mahasiswa mampu memanfaatkan OpenGL sebagai pendeskripsi scene yang mengeluarkan koleksi perintah khusus atau executable ke sistem operasi.3. Mahasiswa mampu mengimplementasikan bahasa pemrograman sebagai pemroses projek animasi.

1.2. Landasan Teori1.2.1. OpenGL(Open GraphicsLibrary)OpenGL merupakan spesifikasi standar yang mendefinisikan sebuah lintas-bahasa,lintas platformAPIuntuk mengembangkan aplikasi yang menghasilkan grafis komputer2Dmaupun3D. OpenGL digunakan untuk keperluan-keperluan pemrograman grafis dan bersifat Open-Source, multi-platform dan multi-languageOpenGL dikembangkan olehSilicon Graphics Inc(SGI) pada tahun 1992 [2] dan secara luas digunakan dalamCAD,realitas maya, visualisasi ilmiah, visualisasi informasi, dansimulasi penerbangan. Hal ini juga digunakan dalam video game, di mana bersaing dengan Direct3D on Microsft Windowsplatform (lihat vs OpenGL Direct3D). OpenGL dikelola oleh sebuah teknologikonsorsiumnirlaba yaitu Khronos Group.Fungsi dasar dari OpenGL adalah mengeluarkan koleksi perintah khusus atau executable ke sistem operasi. Dengan demikian, program ini bekerja dengan perangkat keras grafis yang ada yang berada pada hard drive atau sumber tertentu lainnya. Setiap perintah dalam dirancang untuk melakukan tindakan tertentu, atau memulai efek khusus tertentu yang terkait dengan grafis.OpenGL pada awalnya didesain untuk digunakan pada bahasa pemrograman C/C++, namun dalam perkembangannya OpenGL dapat juga digunakan dalam bahasa pemrograman yang lain seperti Java, Tcl, Ada, Visual Basic, Delphi, maupun Fortran. Namun OpenGL di-package secara berbeda-beda sesuai dengan bahasa pemrograman yang digunakan. Oleh karena itu, package OpenGL tersebut dapat di-download pada situs http://www.opengl.org sesuai dengan bahasa pemrograman yang akan digunakan.Selain memanggil banyak perintah openGL, perintah tersebut digunakan untuk menggambarkan grafis primitive seperti titik,garis dan poligon dalam tiga dimensi. Sebagai tambahan, openGL mendukung lighting, shading, texture mapping, blending, transparancy, dan banyak kemampuan efek khusus lainnya.OpenGL mempunyai banyak fungsi dan penggunaan perintah yang sangat luas, penggunaan openGL membutuhkan library tambahan yang harus di letakkan pada direktory system dari windows (OS),yaitu : OpenGL32.dll Glu32.dlL Glut32.dll

1.2.2. Definisi Objek 3 DimensiObyek 3-D adalah sekumpulan titik-titik 3-D (x,y,z) yang membentuk luasan-luasan (face) yang digabungkan menjadi satu kesatuan. Face adalah gabungan titik-titik yang membentuk luasan tertentu atau sering dinamakan dengan sisi.

1.2.3. Fungsi OpenGL 3D1. Membersihkan WindowsPada komputer, memory untuk menampilkan gambar biasanya diisi dengan gambar yang berasal dari perintah gambar paling akhir, jadi perlu dibersihkan dengan warna latar belakang sebelum digambar lagi. Contoh berikut ini perintah yang digunakan untuk membersihkan layar latar belakang dengan warna hitam dan buffer apa yang akan dibersihkan. Dalam hal ini, buffer warna yang akan dibersihkan karena buffer warna merupakan tempat gambar disimpan.glClearColor 0, 0, 0, 0glClear GL_COLOR_BUFFER_BIT Or GL_DEPTH_BUFFER_BIT

2. Spesifikasi WarnaPada OpenGL mendeskripsikan objek dengan warna objek adalah proses yang berjalan sendiri-sendiri. Sebelum warna diubah maka semua objek yang digambar sesudah perintah tersebut akan menggunakan warna terakhir yang terdapat pada coloring scheme. Untuk warna digunakan perintah glColor3f. Contoh berikut menunjukkan urutan langkah dalam proses spesifikasi warna sebelum objek digambar. Warna yang ditampilkan adalah warna merah.glColor3f 1, 0, 0

3. Memaksa Proses Menggambar Sampai SelesaiKebanyakan sistem grafik modern sudah menggunakan sistem graphics pipeline. Dimana CPU utama memberikan issue perintah menggambar dan hardware lain yang melakukan transformasi, clipping, shading, texturing dan lain-lain. Pada arsitektur yang demikian, proses tidak dilakukan pada satu computer karena setiap komputer mempunyai tugas sendiri. CPU utama tidak harus menunggu proses pada masing-masing komputer tadi selesai, tapi bisa dengan memberikan issue perintah gambar yang berikutnya. Untuk inilah OpenGL menyediakan perintah glFlush yang memaksa client untuk segera mengirim paket network walaupun belum penuh. Program sebaiknya ditulis menggunakan perintah ini karena glFlush tidak memaksa proses gambar untuk selesai tetapi memaksa proses gambar untuk segera dieksekusi, sehingga dijamin semua perintah gambar yang sebelumnya akan segera dieksekusi dalam suatu waktu tertentu.glFlush

4. Menggambar di Bidang Tiga DimensiUntuk menggambar grafik jenis apapun pada komputer umumnya dimulai dengan pixel. Pixel adalah elemen terkecil dari layar monitor yang mempunyai atribut warna dan posisi. Sedangkan untuk membentuk garis, poligon, objek dan lain-lain dapat dilakukan melalui urutan pixel yang berbeda. Menggambar dengan menggunakan OpenGL mempunyai perbedaan dengan bahasa lain, yaitu tidak perlu memikirkan koordinat layar secara fisik tetapi hanya perlu menspesifikasikan posisi koordinat dengan volume penglihatan. OpenGL memikirkan sendiri bagaimana caranya menggambar titik, garis, dan lainnya yang berada dalam ruang tiga dimensi ke gambar dua dimensi pada layar komputer.Area gambar yang dibatasi ini adalah ruang koordinat kartesian yang mempunyai range dari -100 hingga 100 untuk sumbu x, y dan z. Secara sederhana bidang ini dapat dianggap sebagai bidang gambar untuk perintah-perintah OpenGL.Untuk menggambar titik digunakan suatu perintah OpenGL yaitu: glVertex. Fungsi ini dapat mempunyai 2 sampai 4 parameter dari berbagai macam tipe data. Sebagai contoh perintah glVertex di bawah ini akan menspesifikasikan sebuah titik pada posisi 4 sumbu x, 4 sumbu y dan 0 untuk sumbu z. glVertex3f 4, 4, 0. Setelah diketahui cara untuk menspesifikasikan sebuah titik di ruang pada OpenGL. Selanjutnya yang harus ditambahkan adalah informasi tambahan mengenai titik tersebut, apakah titik tersebut akhir dari sebuah garis, atau merupakan sebuah titik sudut dari sebuah poligon atau lainnya, karena definisi geometrik dari sebuah vertex sebenarnya bukanlah hanya sebuah titik pada layar tetapi lebih merupakan sebuah titik dimana terjadi interseksi antara dua buah garis atau kurva.Primitif adalah interpretasi sejumlah set atau deretan titik pada sebuah bentuk yang digambar pada layar. Pada OpenGL terdapat sepuluh macam primitif dari mulai menggambar sebuah titik hingga poligon. Untuk itu digunakan perintah glBegin sebagai cara memberitahu OpenGL untuk memulai menginterpretasi sederetan titik sebagai salah satu bentuk primitif. Dan untuk mengakhiri deretan titik ini digunakan perintah glEnd. Sebagai Contoh sebagai berikut :glBegin bmPolygon // spesifikasikan titik sebagai primitifglVertex3f 4, 4, 0 // spesifikasikan posisi titik glEnd // mengakhiri perintah menggambar titik

BAB IILANGKAH KERJA

1. Buka aplikasi Visual Studio 6.0 dari Start Menu Windows :

2. Kemudian klik File -> New Untuk membuka lembar kerja baru

3. Muncul pilihan Console app yang dipakai >> pilih empety project untuk menulis koding program baru.

4. Setelah itu muncul menu New >> File >> C++ Source File untuk menentukan jenis file yang dibuat

5. Masukkan source kode yang ingin dibuat, seperti berikut :

6. Run program yang telah dibuat untuk mengetahui program berhasil atau tidak.

7. Hasil dari debbuging :

BAB IIIPEMBAHASAN

3.1. Coding Program Berikut ini adalah Source code C++ yang digunakan untuk membuat sebuah animasi 3D sederhana spin spoon :#include #include

void cylinder(float rbase,float rtop,float height);void blok(float tebal,int ratiol,int ratiop);

int screen_width=800;int screen_height=600;int button_up=0,button_down=0;int Turn=0;

double rotation_y=0,rotation_y_plus=-15,direction;double Rhead=0,Rheadplus=0;double rotate_All=0,All_plus=0;double Angguk=0,Anggukplus=0;double press=0,pressplus,pressplus1=180,pressplus2=0,pressplus3=0,pressplus4=0,pressplus5=0;

GLfloat ambient_light[]={0.0,0.0,0.45,1.0};GLfloat source_light[]={0.8,0.8,0.8,1.0};GLfloat light_pos[]={5.0,0.0,6.0,1.0};

void init(void){ glClearColor(1.0,1.0,1.0,0.0); //putih //glClearColor(0.0,0.0,0.4,0.0); //back color glShadeModel(GL_SMOOTH); glViewport(0,0,screen_width,screen_height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0f,(GLfloat)screen_width/(GLfloat)screen_height,1.0f,1000.0f);

glEnable (GL_DEPTH_TEST); glPolygonMode (GL_FRONT_AND_BACK,GL_FILL); glEnable (GL_LIGHTING); glLightModelfv (GL_LIGHT_MODEL_AMBIENT,ambient_light); glLightfv (GL_LIGHT0,GL_DIFFUSE,source_light); glLightfv (GL_LIGHT0,GL_POSITION,light_pos); glEnable (GL_LIGHT0); glEnable (GL_COLOR_MATERIAL); glColorMaterial (GL_FRONT,GL_AMBIENT_AND_DIFFUSE);}

void resize(int width,int height){ screen_width=width; screen_height=height;

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glViewport(0,0,screen_width,screen_height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0f,(GLfloat)screen_width/(GLfloat)screen_height,1.0f,1000.0f);

glutPostRedisplay();}

void display(void){ glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity();

glTranslatef(-6,3,-70); glPushMatrix();

Rhead=Rhead+Rheadplus; glRotatef(Rhead,1.0,0.0,1.0); glTranslatef(0.0,0,0);

glRotatef(0,0,0.0,0.0); glTranslatef(0,0,5); cylinder(1.9,5,3); glRotatef(45,1.0,0.0,0.0); glTranslatef(0,-1.5,5); blok(0.7,3,6); glRotatef(45,1.0,0.0,0.0); glTranslatef(0,2.7,2.8); blok(0.7,3,26); glRotatef(120,0.0,1.0,0.0); glPopMatrix(); glRotatef(360,0.0,0.0,1.0); glTranslatef(0.0,1.0,0); glFlush(); glutSwapBuffers();}

void cylinder(float rbase,float rtop,float height){ float i; glPushMatrix(); glTranslatef(0.0,0.0,-rbase/4); glutSolidCone(rbase,0,32,9);//0 nya buat kerucut,32 nya untuk nutup lubang, 0 nya untuk mlubangi dan membuat jadi tembus (bagian atas)

for(i=0;i