PRAKTIKUM 1
GRAFIK PRIMITIF
OLEH :
Y.NIMROD LEORI
2A / 42516006
D4 TEKNIK KOMPUTER & JARINGAN
NIM : 42516006
LAPORAN PRAKTIKUM 1
A. TUJUAN PRAKTIKUM
B. TEORI DASAR
Grafik Sederhana
Sekarang kita akan belajar menggambar objek dasar dalam OpenGL. Objek dasar
yaitu titik, garis, dan lengkungan. Buat proyek baru dengan nama Objek Dasar, langkah-
langkahnya persis seperti di latihan sebelumnya.
Berikut ini adalah contoh program sederhana menggunakan OpenGl. Program berikut
hanya akan memunculkan satu layar biru kosong, bila program berikut ini dapat berjalan
dengan baik maka kita sudah siap memulai membuat grafik dengan OpenGL.
#include <gl/glut.h>
void Jendela(void)
{
glClear(GL_COLOR_BUFFER_BIT); //membersihkan layar dan men-set dalam
format warna
glFlush(); //memastikan seluruh perintah tereksekusi
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitWindowSize(640,480);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
glutCreateWindow("biru");
glutDisplayFunc(Jendela);
glClearColor (0.0f, 0.0f, 1.0f, 1.0f);
glutMainLoop();
return 0;
}
Pada prinsipnya openGL mempunyai prinsip pembuatan warna sama seperti RGB
pada warna-warna yang disediakan oleh berbagai macam pemrograman. namun
perbedaannya adalah :
* kode warna RGB pada pemrograman lain mempunyai nilai default (255,255,255).
* sedangkan openGL memiliki kode warna default (1,1,1)
jadi intinya kode warna pada openGL mempunyai rentang antara 0 sampai dengan 1.
berikut ini adalah sedikit kode warna yang penulis kumpulkan dari beberapa percobaan.
glPointSize(5.0f) digunakan untuk mengatur besar titik yang akan digambar. Di sini, kita
akan menggambar titik dengan ukuran 5.0. glBegin(GL_POINTS) digunakan untuk
menggambar titik. Posisi titik yang akan digambar harus ditulis antara glBegin(GL_POINTS)
dan glEnd(). glColor3f(1.0f, 0.0f, 0.0f) adalah warna dari titk yang akan digambar. Format
yang digunakan adalah format RGB, jadi warna titik adalah merah. glVertex3f( -10.0f, 5.0f, -
20.0f) berarti posisi titik adalah 10 satuan ke kiri, 5 satuan ke atas, dan 20 satuan menjauh
dari layar. Untuk koordinat, posisi tengah (posisi 0,0,0) berada tepat di tengah-tengah layar.
Sumbu X negatif berarti ke kiri, positif berarti ke kanan. Sumbu Y positif berarti ke atas,
negatif ke bawah. Sedangkan untuk sumbu Z, tanda positif berarti di depan layar (di luar
layar), jadi tidak terlihat di layar. Jadi sumbu Z harus menggunakan tanda negatif agar objek
dapat dilihat.
Setelah bisa menggambar titik, kita akan belajar menggambar garis. Garis terdiri dati dua
titik, caranya mirip dengan cara menggambar titik. Tinggal mengganti glBegin(GL_POINTS)
menjadi glBegin(GL_LINES) seperti pada program bagian garis pertama. Ingat, garis terdiri
dari dua titik. Jadi glVertex3f(...) harus dituliskan dua kali, masing-masing untuk sebuat titik.
glLineWidth(2.0f) digunakan untuk menentukan lebar garis yang akan digambar. Di sini,kita
akan menggambar garis dengan lebar 2. Garis bisa memiliki warna degradasi. Ingat bahwa
garsi terdiri dari dua titik. Bila titik pertama berwarna hijau dan titik kedua berwarna biru,
warna garis akan berdegradasi dari hijau ke biru. Lihat bagian garis kedua untuk melihat
warna degradasi.
#include <gl/glut.h>
void Segitiga(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glColor3f(1.0f, 0.0f, 0.0f); glVertex3f( -0.10,-0.10, 0.00);
glColor3f(0.0f, 1.0f, 0.0f); glVertex3f( 0.10,-0.10, 0.00);
glColor3f(0.0f, 0.0f, 1.0f); glVertex3f( 0.00, 0.10, 0.00);
glEnd();
glFlush();
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitWindowSize(640,480);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
glutCreateWindow("Membuat Segitiga");
glutDisplayFunc(Segitiga);
glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
glutMainLoop();
return 0;
}
Sekarang kita masuk ke bagian menggambar segitiga. Segitiga digambar dengan perintah
glBegin(GL_TRIANGLES). Perhatikan bahwa segitiga juga bisa memiliki warna degradasi.
Untuk menggambar beberapa segitiga, lakukan dengan looping seperti cara biasa. Bila ingin
menggambar beberapa segitiga yang terhubung, gunakan glBegin(GL_TRIANGLE_STRIP).
Di sini, titik pertama, kedua, dan ketiga akan membentuk segitiga pertama. Titik kedua,
ketiga, dan keempat akan membentuk segitiga kedua, dan seterusnya. Perhatikan contoh pada
segitiga kedua. Coba juga glBegin(GL_TRIANGLE_FAN) untuk cara lain.
//Segitiga Terhubung
glBegin(GL_TRIANGLE_STRIP);
glColor3f(1.0f, 0.0f, 0.0f); glVertex3f( -0.10,-0.10, 0.00);
glColor3f(0.0f, 1.0f, 0.0f); glVertex3f( 0.10,-0.10, 0.00);
glColor3f(0.0f, 0.0f, 1.0f); glVertex3f( 0.00, 0.10, 0.00);
glColor3f(1.0f, 1.0f, 0.0f); glVertex3f( 0.15, 0.05, 0.00);
glEnd();
Keselamatan Kerja
C. PROSEDUR PERCOBAAN
1. Buatlah empat buah titik yang terletak pada koordinat-koordinat (25,25) , (25,75) ,
(75,25) dan (75,75) .
2. Buatlah empat buah garis yang masing-masing berbeda warna sehingga membentuk
gradasi warna.
4. Buatlah Sebuah Bentuk gabungan dari semua grafik primitif yang sudah dipelajari.
D. HASIL DAN ANALISA PERCOBAAN
1. Berikut merupakan script dan tampilan dari empat buah titik yang terletak pada
koordinat-koordinat yang telah ditentukan :
#include <gl/glut.h>
void point(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glPointSize(5.0f);
glBegin(GL_POINTS);
glColor3f(1.0f, 0.0f, 0.0f);
glVertex3f(0.25, 0.25, 0);
glVertex3f(0.25, 0.75, 0);
glVertex3f(0.75, 0.25, 0);
glVertex3f(0.75, 0.75, 0);
glEnd();
glFlush();
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitWindowSize(640,480);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
glutCreateWindow("Titik");
glutDisplayFunc(point);
glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
glutMainLoop();
return 0;
}
Dari script yang telah penulis gunakan,terdapat berapa titik yang telah
dimasukkan. Namun pada penerapannya, penulis menurunkan letak titik pada semua
koordinat. Yaitu dengan menambahkan 0, . Hal ini dikarenakan tampilan dari script
hanya sebatas 1.0f ,sehingga jika memasukkan seperto 25.0f , maka akan keluar dari
tampilan.
2. Berikut merupakan script dan tampilan empat buah garis yang masing-masing berbeda
warna sehingga membentuk gradasi warna :
#include <gl/glut.h>
void Garis(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glLineWidth(8.0f);
glBegin(GL_LINES);
glColor3f(0.0f, 0.0f, 1.0f);
glVertex3f( -0.40, 0.20, 0.0);
glColor3f(1.0f, 0.0f, 0.0f);
glVertex3f( -0.40, -0.20, 0.0);
Hasil dari script diatas telah menampilkan 4 buah garis dengan gradasi warna
yang berbeda tiap garisnya. Pada pemilihan warna,penulis menggunakan beberapa
kombinasi dari warna yang ada pada dasar teori,yaitu RGB dan CMYK serta warna
putih. Selain itu, penulis menempatkan sesuai koordinat yang telah penulis
tentukan,serta ketebalan sebanyak 8.0f . Dari hasil script diatas pula penulis
menggunakan latar putih yang diatur pada baris glClearColor, sehingga terdapat
perbedaan warna latar dari soal sebelumnya. Hal ini penulis lakukan agar gradasi
warna yang terbentuk dari garis yang telah dibuat tidak merusak pandangan penglihat
dan dapat melihatnya dengan jelas.
FAN
Perbandingan antara
STRIP (GL_TRIANGLE_STRIP) dan (GL_TRIANGLE_FAN)
yaitu pada algoritma yang digunakan kedua fungsi tersebut. Letak perbedaan bisa
dilihat pada gambar. Strip menggambar segitiga mulai dari titik 1,2 dan 3. Dan setelah
itu berlanjut membuat segitiga mulai dari titik 2,3,4. Begitu seterusnya. Jadi dapat
ditarik sebuah opini bahwa dengan menggunakan fungsi Strip,maka pembentukannya
bertahap dari 3 titik pertama dan 3 titik setelah titik pertama dan berhenti jika
penggambaran segitiga selanjutnya hanya sisa 2 titik. Sedangkan fungsi Fan memulai
penggambaran segitiga di titik 1,2,3 dan melanjutkan ke 1,3,4 . Dapat ditarik sebuah
opini bahwa fungsi Fan menitik beratkan sebuah titik sebagai pusat dari awal
terbentuknya segitiga yaitu titik pertama dan membentuk segitiga secara
berurutan,sesuai dengan script yang dituliskan. Dengan kata lain, titik pertama akan
menuju ke titik 2 dan 3, lalu titik pertama menuju ke titik 3 dan 4 . Begitu
seterusnya,namun jika tidak cukup 3 titik,maka akan terhenti.
4. Berikut script yang menampilkan berbagai Bentuk gabungan dari semua grafik
primitif yang sudah dipelajari.
#include <gl/glut.h>
void GABUNGAN(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0f, 1.0f, 1.0f);
glRectf(-0.18, 0.18, 0.18, -0.18);
glBegin(GL_TRIANGLES);
glColor3f(1.0f, 0.0f, 0.0f); glVertex3f( -0.18,0.18, 0.00);
glColor3f(0.0f, 1.0f, 0.0f); glVertex3f( 0.18,0.18, 0.00);
glColor3f(0.0f, 0.0f, 1.0f); glVertex3f( 0.00, 0.40, 0.00);
glEnd();
glLineWidth(3.0f);
glBegin(GL_LINES);
glColor3f(0.0f, 0.0f, 1.0f);
glVertex3f( 0.00, 0.40, 0.0);
glColor3f(1.0f, 0.0f, 0.0f);
glVertex3f( 0.70, 0.40, 0.0);
glEnd();
glBegin(GL_TRIANGLE_STRIP);
glColor3f(1.0f, 0.0f, 0.0f); glVertex3f( 0.70, 0.70, 0.00);
glColor3f(1.0f, 0.0f, 0.0f); glVertex3f( 0.90, 0.70, 0.00);
glColor3f(1.0f, 0.0f, 0-.0f); glVertex3f( 0.80, 0.90, 0.00);
glColor3f(1.0f, 1.0f, 1.0f); glVertex3f( 0.95, 0.85, 0.00);
glEnd();
glBegin(GL_TRIANGLE_FAN);
glColor3f(1.0f, 0.0f, 0.0f); glVertex3f( -0.40,0.30, 0.00);
glColor3f(0.0f, 1.0f, 0.0f); glVertex3f( -0.20,0.30, 0.00);
glColor3f(0.0f, 0.0f, 1.0f); glVertex3f( -0.40, 0.50, 0.00);
glColor3f(1.0f, 1.0f, 0.0f); glVertex3f( -0.20, 0.45, 0.00);
glEnd();
glPointSize(5.0f);
glBegin(GL_POINTS);
glColor3f(0.0f, 0.0f, 0.0f);
glVertex3f(0.0, -0.10, 0.0);
glVertex3f(0.30, 0.0, 0.0);
glVertex3f(0.50, 0.0, 0.0);
glEnd();
glFlush();
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitWindowSize(640,480);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
glutCreateWindow("GABUNGAN");
glutDisplayFunc(GABUNGAN);
glClearColor(1.0f, 0.0f, 1.0f, 0.0f);
glutMainLoop();
return 0;
}
Untuk membuat tampilan diatas, menulis membaginya menjadi 3 wujud objek
dari gabungan grafik primitif yang telah dipelajari. Pertama penulis membuat sebuah
rumah dengan menggabungkan grafik segi empat, segitiga, garis, dan titik-titik
sebagai jendela kecil pada rumah tersebut. Kedua terdapat tiang bendera dimana
tiangnya berasal dari garis dan bendera dari segitiga Fan yang penulis adakan sedikit
modifikasi terhadap bentuknya. Dan yang ketiga ada layangan berupa gabungan dari
garis sebagai ekor dan segitiga Strip sebagai layang-layangnya . Penulis memberikan
beberapa gradasi warna pada setiap objek tersebut. Penulis berusaha menyampaikan
pesan pemandangan yang indah terhadap sebuah rumah sederhana dengan berbagai
objek disekitarnya kepada para penikmat gambar.
ANALISIS
Pada praktikum ini, selain beberapa analisis yang telah tertera pada hasil, perlu
diketahui, bahwa penulis dalam melakukan langkah kerja, meneliti script yang
terdapat pada dasar teori dan mengadakan modifikasi terhadap script itu, sehingga
muncullah setiap gambar grafik yang diinginkan. Namun dalam penerapannya,
penulis belajar bahwa dalam membuat grafik yang sesederhana ini, perlu mempelajari
titik koordinat setiap titiknya, sehingga dapat membentuk sebuah objek yang
diinginkan.
Pada praktikum ini pula dikenal istilah OpenGl, dimana terdapat beberapa
fungsi yang digunakan dalam pembuatan objek. Grafis yang dihasilkan pada
praktikum ii bersifat primitif atau sederhana, karena belum dapat membuat bentuk-
bentuk objek yang kompleks. Dengan adanya OpenGl ini, pembaca diharapkan dapat
memahami bahwa teknik penggambaran objek menggunakan OpenGl masih dalam
kategori mudah dipamahi, kita hanya tinggal belajar mengenai titik koordinat untuk
meletakkan setiap titik dalam pembuatan objek.