Tutorial OpenGL
Aila Gema Safitri
NIM : 23213314
Gambar 1.
Pilih Application Settings - dengan Application type Console application - Empty project
Finish.
Gambar 2
Tutorial OpenGL
Aila Gema Safitri
NIM : 23213314
7. Pada Solution Explorer akan terlihat project yang baru kita buat. Klik kanan project
properties , maka akan muncul wizard seperti pada gambar 3.
Gambar 3
Tutorial OpenGL
Aila Gema Safitri
NIM : 23213314
Gambar 4
Gambar 5
Tutorial OpenGL
Aila Gema Safitri
NIM : 23213314
Gambar 6
Dengan demikian, project yang kita buat, sudah terhubung dengan file-file header dan
library GLUT.
10. Kembali ke project, buat sebuah file di folder Source File (klik kanan) add new item.
Maka akan muncul wizard seperti pada gambar 7. Pastikan memilih file dengan extension
.cpp.
Gambar 7
Tutorial OpenGL
Aila Gema Safitri
NIM : 23213314
11. Pada halaman file Source.cpp ketik kode program yang akan di jalankan. Jika ingin
memastikan apakah library GLUT sudah dapat digunakan, maka kita dapat mengambil
salah satu contoh program pemakaian fungsi yang ada pada library GLUT. Misal adalah
membuat polygon segi delapan dengan warna. Contoh list kode programnya sebagai
berikut :
Gambar 8
Setelah itu coba jalankan program dengan melakukan Start Debugging (F5). Maka
hasilnya adalah seperti pada gambar 9.
Tutorial OpenGL
Aila Gema Safitri
NIM : 23213314
Gambar 9
Tutorial OpenGL
Program 1. Hello World dan Tampilan Persegi
Tutorial OpenGL
Aila Gema Safitri
NIM : 23213314
Program 2. Segitiga
Program 2 membuat segitiga dimodelkan dengan menggunakan komponen dasar GL_ TRIANGLES dengan
koordinat titik adalah
glVertex2f(-0.5, -0.5); // titik kiri bawah
glVertex2f(-0.5, 0.5); // titik kiri atas
glVertex2f(0.5, 0.5); // titik kanan atas
Untuk membuat setting warna , digunakan fungsi glColor3f (1.0, 0.0, 1.0). Artinya :
3 : sumbu koordinat x,y,z
f : tipe data float
v : vector dari sumbu x,y,z
Program 3. Polygon
Program 3 membuat polygon dimodelkan dengan menggunakan komponen dasar GL_ POLYGON dengan
Tutorial OpenGL
Aila Gema Safitri
NIM : 23213314
Contoh Program untuk menggambar jenis OpenGL Geometric Primitive yang lain.
Gambar diatas adalah membuat geometri primitive open gl model QUAD dengan koordinat titik adalah :
glBegin(GL_QUADS);
glColor3f(1,1,0);
glVertex2f(-0.5, 0.5);
glVertex2f(-0.85, -0.5);
glVertex2f(0.5, 0);
glVertex2f(0.5, 0.5);
dan settingan warna kuning yaitu glColor3f(1, 1, 0)
Tutorial OpenGL
Aila Gema Safitri
NIM : 23213314
Gambar diatas adalah Polygon Segi Delapan dengan kombinasi warna pada tiap vertexnya.
glBegin(GL_POLYGON);
glColor3f(0, 1, 0); // pengaturan warna
glVertex2f(-0.5, -0.5); // koordinat x,y
glColor3f(0, 0, 1);
glVertex2f(-0.75, 0);
glColor3f(1, 0, 0);
glVertex2f(-0.5, 0.5);
glColor3f(0, 1, 0);
glVertex2f(0, 0.75);
glColor3f(0, 0, 1);
glVertex2f(0.5, 0.5);
glColor3f(1, 0, 0);
glVertex2f(0.75, 0);
glColor3f(0, 1, 0);
glVertex2f(0.5, -0.5);
glColor3f(0, 0, 1);
glVertex2f(0,-0.75);
Tutorial OpenGL
Aila Gema Safitri
NIM : 23213314
Untuk memodelkan obyek dalam 3D kita perlu memberi properti koordinat z dengan
menggunakan fungsi glVertex3f(). Sehingga koordinat polygon adalah :
glBegin(GL_POLYGON);
glColor3f(0, 1, 0);
glVertex3f(-0.5, -0.5, 1);
glColor3f(0, 0, 1);
glVertex3f(-0.75, 0, 1);
glColor3f(1, 0, 0);
glVertex3f(-0.5, 0.5, 1);
glColor3f(0, 1, 0);
glVertex3f(0, 0.75, 1);
glColor3f(0, 0, 1);
glVertex3f(0.5, 0.5, -1);
glColor3f(1, 0, 0);
glVertex3f(0.75, 0, -1);
glColor3f(0, 1, 0);
glVertex3f(0.5, -0.5, -1);
glColor3f(0, 0, 1);
glVertex3f(0,-0.75, -1);
Pada program 6 diatas, agar gambar tetap berada pada proporsi yang tepat, maka perlu digunakan callback
reshape yang dipanggil setiap kali window berubah ukuran. Untuk itu perlu lakukan dua langkah berikut:
- membuat fungsi yang akan dipanggil saat rehape, di sini fungsinya adalah void reshape(int width, int height)
- melakukan registrasi callback reshape dengan fungsi glutReshapeFunc(.)
glViewport(x_left, x_top, x_right, y_right) bertanggung jawab untuk melakukan setting viewport dari suatu
window, yaitu bagian dari window yang digunakan untuk menggambar.
Tutorial OpenGL
Aila Gema Safitri
NIM : 23213314
Program 7 adalah Transformasi obyek menggunakan operasi transformasi (glRotate, glTranslate) dengan didahului
proses merubah status OpenGL ke mode proyeksi dengan perintah glMatrixMode(GL_MODELVIEW). Terdapat
juga fungsi callback keyboard untuk menangani input keyboard. Obyek ditranslasikan pada sumbu z dengan
menggunakan tombol keyboard , dan ..Callback timer digunakan untuk timer yang di sini digunakan untuk
animasi berputar.
Program 8 menunjukkan tentang urutan transformasi yang tidak bersifat komutatif, artinya, urutan transformasi
juga sangat berpengaruh pada hasilnya. Pada program 8, urutan transformasi adalah translasi baru dirotasi.
Tutorial OpenGL
Aila Gema Safitri
NIM : 23213314
Selain itu terdapat konsep Depth Buffer. Pada program 8, mode GLUT_DEPTH dan perintah
glEnable(GL_DEPTH_TEST) harus dikomen, agar objek kubus bisa di render. Pada program di atas mode display
menggunakan tipe GLUT_DOUBLE yang diikuti oleh glutSwapBuffers(). Hal ini merupakan teknik yang disebut
Double Buffer untuk menghindari flicker yaitu objek berkedip.
Tugas : Jika fungsi transformasi di tukar urutannya, yaitu rotasi baru translasi (bergeser) maka
tampilan menjadi seperti dibawah :
Objek akan melakukan rotasi sambil melakukan translasi dengan cara menggeser posisi.
Note : jika komen GLUT_DEPTH dan glEnable(GL_DEPTH_TEST) dihapus, maka objek menjadi tidak tampak. Teknik
ini merupakan salah satu algoritma HIDDEN SURFACE REMOVAL. Menyembunyikan objek sehingga tidak tampak di
permukaan.
Tutorial OpenGL
Aila Gema Safitri
NIM : 23213314
Program 9 adalah contoh penggunaan texture mapping pada sebuah image. Prosedur int LoadGLTexture()
melakukan proses load image bmp ke memory dalam bentuk struktur data AUX_RGBImageRec*. Kemudian image
di konversi menjadi tiga buah texture dalam OpenGL dengan metoda filter pembesaran texture yang berbeda.
Metoda itu adalah metoda Nearest Filtered Texture, metoda Linear Interpolation Texture dan metoda
Mipmapped Texture.
Filter pembesaran texture berpengaruh pada bagaimana OpenGL melakukan proses rasterisasi texture saat texture
ditampilkan pada jumlah pixel yang lebih besar atau lebih kecil dari ukuran sebenarnya. Pada Nearest Filtered
Texture, texture yang ditampilkan merupakan hasil pemilihan nilai pixel pada posisi terdekat. Sedangkan dengan
Linear Interpolation Texture (LPT), texture yang ditampilkan merupakan hasil interpolasi linear antara pixel-pixel
disekitarnya. Pada Mipmapped Texture(MPT), interpolasi linear dilakukan pada awal secara offline sehingga
dihasilkan banyak texture dengan ukuran dari yang kecil hingga yang besar. LPT dan MPT akan menghasilkan kirakira hasil yang sama dengan LPT akan sedikit lebih lambat dari MPT walaupun memori yang digunakan jauh lebih
kecil.
Program 10 adalah proses pencampuran lebih dari satu texture disebut dengan istilah blending, yaitu
Tutorial OpenGL
Aila Gema Safitri
NIM : 23213314
Program 11 menampilkan perubahan yang terjadi pada void init() dan void mydisplay() pada Program 10 untuk
menghasilkan suatu box tranparan.
Hal ini dicapai dengan menggunakan warna blending putih (full-brightness) dengan transparansi 50% :
glColor4f(1.0f, 1.0f, 1.0f, 0.5);
glBlendFunc(GL_SRC_ALPHA,GL_ONE);
Tutorial OpenGL
Aila Gema Safitri
NIM : 23213314
Tugas : Mengubah salah satu bagian box menjadi transparan, dengan cara mengubah fungsi init dan mydisplay.
Sehingga tampilan menjadi seperti di atas.
Untuk menentukan sejauh mana kabut masih berefek, gunakan fungsi glFogf(GL_FOG_END, 5.0f) .
Tugas : Ubah variable Fog pada fungsi init, untuk melihat pengaruhnya.
Pada ke dua gambar diatas, nilai variable FOG diubah, untuk melihat pengaruh fog pada gambar.
Berikut perubahan pada fungsi init.
// FOG
glClearColor(0.5f,0.5f,0.5f,1.0f);
glFogi(GL_FOG_MODE, fogMode[GL_EXP2]);
glFogfv(GL_FOG_COLOR, fogColor); // Set Fog Color
glFogf(GL_FOG_DENSITY, 0.20f);
glHint(GL_FOG_HINT, GL_NICEST);
glFogf(GL_FOG_START, 100.0f);
glFogf(GL_FOG_END, 500.0f);
Fog Mode diubah menjadi GL_EXP2 yaitu fog standar yang dirender pada keseluruhan screen.
Fog density diubah , pada gambar bagian kiri besarnya density adalah 0.70, sementara pada bagian kanan
adalah 0.2. Tampak perbedaan tingkat ketebalan fog antara ke dua gambar.
The line glHint (GL_FOG_HINT, GL_DONT_CARE); memberikan informasi kepada OpenGL tentang
bagaimana proses rendering ingin dilakukan. Pada contoh misalnya GL_NICEST yang berarti perhitungan
fog dilakukan per-pixel..
glFogf(GL_FOG_START, 100.0f); jarak dari kamera ketika fog mulai adalah 100.
glFogf(GL_FOG_END, 500.0f); efek kabut sejauh 500.
Tutorial OpenGL
Aila Gema Safitri
NIM : 23213314
Pada Program 13 kita membuat file model 3D dengan format kita sendiri. File format kita
adalah file .txt.
Tugas. Mengubah Bentuk Objek di file .txt pada program 13
Pada program 13, tampilan objek tidak memiliki atap (ceiling). Karena pada file .txt, yang diubah adalah vertex
pada bagian ceiling dibuat sama dengan vertex bagian bawah (floor). Yaitu :
// Floor 1
-5.0 0.0 -5.0 0.0 9.0
-5.0 0.0 5.0 0.0 0.0
5.0 0.0 5.0 6.0 0.0
-5.0 0.0 -5.0 0.0 9.0
5.0 0.0 -5.0 6.0 9.0
5.0 0.0 5.0 6.0 0.0
// Ceiling 1
-5.0 0.0 -5.0 0.0 9.0
-5.0 0.0 5.0 0.0 0.0
Tutorial OpenGL
Aila Gema Safitri
NIM : 23213314
Program 14 memberi ilustrasi tentang bagaimana suatu file .3ds dibaca dan dirender. Di dalam file .3ds, terdapat
banyak blok kode yang disebut chunk. Pada tiap chunk, berisi nama objek, koordinat vektor x,y,z, mapping
koordinat, list polygon, warna dan animasi objek.
Cara kerja chunk, adalah linier. Kode dieksekusi secara berurutan. Jadi antar chunk saling berhubungan. Contoh
jika ingin membaca blok Vertices List, maka kita harus membaca blok utama (main chunk) terlebih dahulu, lalu 3D
Editor Chunk, Object blok, akhirnya Triangular Object Mesh Chunk.
Pada program 14, proses rendering objek dilakukan sesuai dengan urutan kode di tiap blok pada file .3ds. Urutan
proses rendering pada file .3ds secara pseudocode dapat dilihat sebagai berikut :
chunkID : 4d4d
chunklength : 5540
...................
list vertices x, y, z
...................
mapping list u,v
.....................
Tutorial OpenGL
Aila Gema Safitri
NIM : 23213314
chunID
chunkLength
......................
polygon point
face flags
...................
chunID
chunkLength
glTexCoord2f(0.0,0.0); glVertex3f(particle[i].xpos-0.005,
particle[i].ypos+0.005, particle[i].zpos+0.0); // koordinat kiri atas
glTexCoord2f(1.0,1.0); glVertex3f(particle[i].xpos+0.005,
particle[i].ypos-0.005, particle[i].zpos+0.0); //koordinat kanan bawah
glTexCoord2f(1.0,0.0); glVertex3f(particle[i].xpos-0.005,
particle[i].ypos-0.005, particle[i].zpos+0.0); //koordinat kiri bawah
glEnd();
} else CreateParticle(i);
}
EvolveParticle();
glFlush();
glutSwapBuffers();
}
Program 17 memberi contoh bagaimana efek sumber cahaya dan material dari obyek. Fungsi void
spotlight_display untuk mengatur posisi material terhadap sumber cahaya
Dan fungsi void lighting_display untuk mengatur koordinat sumber cahaya
Tutorial OpenGL
Aila Gema Safitri
NIM : 23213314
Tutorial OpenGL
Aila Gema Safitri
NIM : 23213314
Tutorial OpenGL
Aila Gema Safitri
NIM : 23213314