I. PENDAHULUAN
Dalam dunia grafika komputer, bayangan (shadow) memiliki peran sentral dalam
menciptakan pengalaman visual yang realistis dan mendalam. Pada dasarnya, bayangan memberikan
dimensi tambahan kepada objek 3D, menunjukkan adanya interaksi antara objek tersebut dengan
sumber cahaya di dalam suatu ruang tiga dimensi. Dalam konteks pengembangan aplikasi grafis
menggunakan OpenGL, konsep bayangan menjadi kritis karena dapat memberikan detail dan
kompleksitas yang diperlukan untuk meningkatkan kualitas visual.
Teknik bayangan lainnya yang juga umum digunakan melibatkan "shadow volumes" dan
"shadow masks," masing-masing dengan pendekatan yang unik untuk mencapai hasil visual yang
diinginkan. Pemahaman mendalam terhadap prinsip-prinsip dasar di balik teknik-teknik ini sangat
penting agar dapat mengimplementasikannya secara efektif dalam pengembangan aplikasi berbasis
OpenGL.
Pentingnya integrasi bayangan dalam pengembangan aplikasi OpenGL tidak hanya terbatas
pada aspek estetika visual semata. Bayangan juga memberikan informasi kontekstual tentang
hubungan spasial antara objek, menambahkan tingkat realisme dan detail yang diperlukan untuk
menciptakan pengalaman pengguna yang memukau. Oleh karena itu, pembahasan dan pemahaman
lebih lanjut mengenai konsep bayangan dalam konteks OpenGL akan memberikan wawasan yang
lebih mendalam tentang cara meningkatkan kualitas grafis suatu aplikasi.
1
Praktikum Grafika Komputer
Pertemuan ke-10 Bayangan
II. PEMBAHASAN
A. Source Code
#include <iostream>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <GL/glut.h>
using namespace std;
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 };
void help();
2
Praktikum Grafika Komputer
Pertemuan ke-10 Bayangan
/*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);
glColor3f(1.0,1.0,0.0);
glBegin(GL_POINTS);
glVertex3f(l[0],l[1],l[2]);
glEnd();
glColor3f(0.8,0.8,0.8);
glBegin(GL_QUADS);
glNormal3f(0.0,1.0,0.0);
glVertex3f(-1300.0,e[1]-0.1, 1300.0);
glVertex3f( 1300.0,e[1]-0.1, 1300.0);
glVertex3f( 1300.0,e[1]-0.1,-1300.0);
glVertex3f(-1300.0,e[1]-0.1,-1300.0);
glEnd();
// 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();
3
Praktikum Grafika Komputer
Pertemuan ke-10 Bayangan
void help()
{
cout<<"=================================================="<<endl;
cout<<"=================================================="<<endl;
cout<<"Proyeksi Contoh Bayangan Sebuah Obyek Teapot"<<endl;
cout<<"\t\tGea Davids Khalik\t\t"<<endl;
cout<<"\t\t 2206013\t\t"<<endl;
cout<<"=================================================="<<endl;
cout<<endl;
cout<<"=================================================="<<endl;
cout<<"s : Memindahkan sumber cahaya naik"<<endl;
cout<<"w : Memindahkan sumber cahaya turun"<<endl;
cout<<"a : Memindahkan sumber cahaya ke kanan"<<endl;
cout<<"d : Memindahkan sumber cahaya ke kiri"<<endl;
cout<<"q : Memindahkan sumber cahaya ke depan"<<endl;
cout<<"e : Memindahkan sumber cahaya ke belakang"<<endl;
cout<<"=================================================="<<endl;
cout<<"=================================================="<<endl;
}
void idle()
{
rx+=0.4;
ry+=0.7;
render();
}
4
Praktikum Grafika Komputer
Pertemuan ke-10 Bayangan
glLoadIdentity();
glTranslatef(0.0, 0.0, -150.0);
help();
glutMainLoop();
return 0;
}
Output :
B. Penjelasan
Program tersebut adalah contoh implementasi proyeksi bayangan menggunakan OpenGL. Berikut adalah
penjelasan singkat dari beberapa bagian utama dalam program:
1 Inisialisasi Variabel
• `rx` dan `ry` menyimpan nilai rotasi pada sumbu-x dan sumbu-y.
• `l` adalah koordinat sumber cahaya.
• `n` adalah vektor normal permukaan bayangan.
• `e` adalah posisi mata/pemirsa.
2 Fungsi `draw`
• Membuat obyek yang akan digambar menggunakan fungsi `glutSolidCone`.
3 Fungsi `glShadowProjection`
• Membuat proyeksi bayangan dengan menghitung matriks transformasi dan mengalikannya pada
matriks model-view.
5
Praktikum Grafika Komputer
Pertemuan ke-10 Bayangan
4 Fungsi `render`
• Mengatur tampilan, warna latar belakang, dan pencahayaan.
• Gambar lantai sebagai bayangan.
• Gambar obyek dan bayangannya dengan memanfaatkan proyeksi bayangan.
5 Fungsi `keypress`
• Mengatur respons terhadap input keyboard.
• Mengubah posisi sumber cahaya berdasarkan input.
6 Fungsi `help`
• Menampilkan pesan bantuan yang menjelaskan fungsi dari setiap tombol keyboard yang dapat
digunakan.
7 Fungsi `idle`
• Mengatur rotasi obyek secara terus-menerus untuk memberikan efek dinamis.
8 Fungsi `resize`
• Mengatur ulang viewport ketika ukuran jendela berubah.
9 Fungsi `main`
• Inisialisasi GLUT dan menyiapkan jendela.
• Mengatur fungsi-fungsi callback.
• Mengaktifkan beberapa fitur OpenGL seperti pencahayaan, material warna, dan depth testing.
• Menjalankan loop utama GLUT.
6
Praktikum Grafika Komputer
Pertemuan ke-10 Bayangan
III. Kesimpulan
Dalam program proyeksi bayangan menggunakan OpenGL ini, konsep dasar grafika
komputer diimplementasikan untuk menciptakan tampilan 3D dengan efek proyeksi bayangan.
Program ini menggunakan GLUT dan OpenGL untuk membuat jendela grafis, mengatur
pencahayaan, dan merender obyek 3D. Pada intinya, proyeksi bayangan dihasilkan dengan
menghitung transformasi matriks yang memodifikasi tampilan obyek sesuai dengan posisi dan arah
sumber cahaya. Pengguna dapat berinteraksi dengan program melalui input keyboard untuk
mengubah posisi sumber cahaya. Keseluruhan, program ini memberikan pemahaman praktis terhadap
konsep-konsep dasar dalam grafika komputer, seperti transformasi matriks, pencahayaan, dan
proyeksi bayangan.