1
I. PENDAHULUAN
Grafika komputer merupakan cabang ilmu yang terus berkembang pesat,
memberikan daya cipta manusia untuk menciptakan dunia visual yang semakin mendekati
realitas. Dalam pengembangan grafika komputer, salah satu aspek yang krusial adalah
pemahaman dan pengimplementasian bayangan. Bayangan bukan hanya sekadar
representasi visual, namun juga kunci untuk mencapai tingkat realisme yang tinggi dalam
penggambaran objek dan scene.
Bayangan dalam konteks grafika komputer adalah hasil dari kompleksitas interaksi
antara sumber cahaya, objek, dan mata pengamat. Materi ini akan menjelaskan aspek-aspek
kunci yang terlibat dalam pembentukan bayangan, dari pencahayaan hingga teknik
pemodelan yang digunakan untuk menciptakan gambar yang meyakinkan. Pemahaman
mendalam tentang bayangan diperlukan untuk memberikan dimensi dan kedalaman pada
objek yang dirender, sehingga memungkinkan para desainer dan pengembang grafis untuk
menciptakan pengalaman visual yang lebih kaya.
1
Praktikum Grafika Komputer
Pertemuan ke-2 Primitive Drawing
II. PEMBAHASAN
A. Source Code
Bayangan
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <GL/glut.h>
double rx = 0.0;
double ry = 0.0;
float l[] = { 0.0, 80.0, 0.0 }; // koordinat sumber cahaya
float n[] = { 0.0, -1.0, 0.0 };
float e[] = { 0.0, -60.0, 0.0 };
2
Praktikum Grafika Komputer
Pertemuan ke-2 Primitive Drawing
// kalikan matriks
glMultMatrixf(mat);
}
// render
void render() {
glClearColor(0.0, 0.6, 0.9, 0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLightfv(GL_LIGHT0, GL_POSITION, l);
glDisable(GL_CULL_FACE);
glDisable(GL_LIGHTING);
// gambar bayangan
glPushMatrix();
glRotatef(ry, 0, 1, 0);
glRotatef(rx, 1, 0, 0);
glEnable(GL_LIGHTING);
glColor3f(0.0, 0.0, 0.8);
draw();
glPopMatrix();
glutSwapBuffers();
}
3
Praktikum Grafika Komputer
Pertemuan ke-2 Primitive Drawing
if (c == 27)
exit(0);
else if (c == 's')
l[1] -= 5.0;
else if (c == 'w')
l[1] += 5.0;
else if (c == 'a')
l[0] -= 5.0;
else if (c == 'd')
l[0] += 5.0;
else if (c == 'q')
l[2] -= 5.0;
else if (c == 'e')
l[2] += 5.0;
else if (c == '?')
help();
}
void help() {
printf("==================================================\n");
printf("proyeksi contoh bayangan sebuah obyek cube\n");
printf("----------------------------------------------------------------\n");
printf("s/w memindahkan sumber cahaya naik/turun\n");
printf("a/d memindahkan sumber cahaya kekanan/kekiri\n");
printf("q/e memindahkan sumber cahaya ke depan atau ke
belakang\n");
printf("? ini adalah contoh\n");
printf("==================================================\n");
}
void idle() {
rx += 0.4;
ry += 0.7;
render();
}
4
Praktikum Grafika Komputer
Pertemuan ke-2 Primitive Drawing
glutDisplayFunc(render);
glutIdleFunc(idle);
glEnable(GL_NORMALIZE);
glEnable(GL_LIGHTING);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHT0);
glEnable(GL_TEXTURE_2D);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0f, 1.0, 1.0, 400.0); // Reset koordinat sebelum
dimodifikasi/diubah
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0, 0.0, -150.0);
help();
glutMainLoop();
return 0;
}
5
Praktikum Grafika Komputer
Pertemuan ke-2 Primitive Drawing
B. Output
C. Penjelasan
Kode program di atas merupakan implementasi proyeksi bayangan untuk objek kubus
menggunakan OpenGL dan GLUT dalam bahasa pemrograman C. Dalam program ini, beberapa
variabel global seperti `rx`, `ry`, `l`, `n`, dan `e` dideklarasikan untuk mengontrol rotasi, posisi
sumber cahaya, dan vektor normal.
Fungsi `help()` menampilkan pesan bantuan di konsol, dan fungsi `draw()` menggunakan
fungsi `glutSolidCube()` untuk menggambar objek kubus. Proyeksi bayangan diimplementasikan
dalam fungsi `glShadowProjection`, yang serupa dengan versi sebelumnya.
Fungsi `render()` mengatur proses rendering, termasuk pengaturan tampilan dan warna latar
belakang, pencahayaan, serta menggambar objek kubus dan bayangannya. Fungsi input keyboard
`keypress()` memberikan respons terhadap input pengguna, memungkinkan pergerakan sumber
cahaya dalam berbagai arah.Fungsi `idle()` memberikan efek animasi pada objek dan bayangannya
dengan memanggil fungsi `render()` secara terus-menerus. Fungsi `resize()` mengatur viewport
OpenGL ketika ukuran jendela berubah.
Dalam fungsi `main()`, inisialisasi OpenGL dan GLUT dilakukan, termasuk pengaturan
proyeksi perspektif, pencahayaan, dan inisialisasi jendela GLUT. Beberapa pengaturan OpenGL
diaktifkan seperti normalisasi vektor normal, pencahayaan, uji kedalaman, dan penggunaan lampu.
Seluruh setup modelview dan proyeksi dilakukan di bagian akhir fungsi `main()`. Program
ini memberikan pemahaman praktis tentang proyeksi bayangan dalam konteks grafika komputer
dan memberikan interaktivitas dengan pengguna melalui input keyboard.
6
Praktikum Grafika Komputer
Pertemuan ke-2 Primitive Drawing
7
Praktikum Grafika Komputer
Pertemuan ke-2 Primitive Drawing
III. Kesimpulan
Secara keseluruhan, kode program tersebut adalah implementasi proyeksi bayangan untuk
objek kubus menggunakan OpenGL dan GLUT dalam bahasa pemrograman C. Program ini
memanfaatkan variabel global untuk mengontrol posisi dan rotasi sumber cahaya, serta vektor
normal. Fungsi-fungsi seperti `help()`, `draw()`, dan `glShadowProjection()` berkontribusi dalam
menampilkan pesan bantuan, menggambar objek kubus, dan mengimplementasikan proyeksi
bayangan.
Fungsi `render()` mengatur seluruh proses rendering, termasuk pencahayaan, pengaturan
tampilan, dan menggambar objek kubus beserta bayangannya. Pengguna dapat berinteraksi dengan
program melalui input keyboard yang diatur oleh fungsi `keypress()`, memungkinkan pergerakan
sumber cahaya dalam berbagai arah. Animasi objek dan bayangan dicapai melalui fungsi `idle()` yang
dipanggil secara berulang.
Melalui fungsi `resize()`, program dapat menanggapi perubahan ukuran jendela dengan
mengatur viewport OpenGL. Dengan inisialisasi OpenGL dan GLUT di dalam fungsi `main()`,
program mempersiapkan lingkungan grafis yang memungkinkan visualisasi proyeksi bayangan objek
kubus secara interaktif. Keseluruhan, program ini memberikan pengalaman praktis dalam
pengembangan grafika komputer sederhana, dengan fokus pada konsep proyeksi bayangan dan
interaksi pengguna.