Membuat Bola 3D dengan OpenGL
Dalam tutorial ini, kita akan membuat objek bola 3D menggunakan OpenGL. Kita akan menggambar bola menggunakan poligon yang dihitung dari dua parameter sudut: theta dan phi. Program ini menggunakan GLUT untuk mengatur tampilan dan interaktivitas di layar.
Berikut adalah penjelasan tentang kode yang telah Anda berikan.
1. Struktur Program
Berikut adalah kode lengkap untuk menggambar bola 3D menggunakan OpenGL:
#include<windows.h>
#include<math.h>
#include<gl\glut.h>
#define PI 3.14
void Bola(GLfloat radius)
{
GLdouble inc = PI/12;
GLdouble theta, phi;
for (theta=-PI/2; theta<(PI/2-inc); theta+=inc){
for (phi=0; phi<2*PI; phi+=inc){
glBegin(GL_POLYGON);
glVertex3f(radius*cos(theta)*cos(phi), radius*sin(theta), radius*cos(theta)*sin(phi));
glVertex3f(radius*cos(theta+inc)*cos(phi), radius*sin(theta+inc), radius*cos(theta+inc)*sin(phi));
glVertex3f(radius*cos(theta+inc)*cos(phi+inc), radius*sin(theta+inc), radius*cos(theta+inc)*sin(phi+inc));
glVertex3f(radius*cos(theta)*cos(phi+inc), radius*sin(theta), radius*cos(theta)*sin(phi+inc));
glEnd();
}
}
glFlush();
}
void Display(void){
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0, 1.5, 0);
glutWireSphere(1, 50, 50); // Menggambar bola wireframe
glRotatef(1, 1, 1, 1); // Memutar objek bola secara perlahan
glFlush();
glutSwapBuffers();
glutPostRedisplay();
}
void reshape(int w, int h){
glViewport(0, 0, (GLsizei)w, (GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glOrtho(-1.5, 1.5, -1.5, 1.5, 1.5, 20);
gluLookAt(0, 0, 5, 0, 0, -100, 0.0, 1.0, 0.0);
}
void init(void){
glClearColor(0, 0, 0, 0); // Latar belakang hitam
glPolygonMode(GL_FRONT, GL_LINE);
glPolygonMode(GL_BACK, GL_LINE);
}
int main(int argc, char* argv[]){
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500, 500);
glutInitWindowPosition(500, 200);
glutCreateWindow("TM14 - Bola 3D");
init();
glutDisplayFunc(Display);
glutReshapeFunc(reshape);
glutMainLoop();
}
2. Penjelasan Kode
a. Fungsi Bola
Fungsi Bola
digunakan untuk menggambar bola 3D. Bola digambar menggunakan banyak poligon segi empat yang dibentuk oleh dua parameter sudut: theta dan phi. Fungsi ini menggunakan dua loop untuk menghitung posisi titik-titik pada bola berdasarkan parameter sudut tersebut, dan kemudian menggambar setiap poligon dengan glVertex3f
.
void Bola(GLfloat radius)
{
GLdouble inc = PI/12; // Interval sudut
GLdouble theta, phi;
for (theta=-PI/2; theta<(PI/2-inc); theta+=inc){
for (phi=0; phi<2*PI; phi+=inc){
glBegin(GL_POLYGON);
glVertex3f(radius*cos(theta)*cos(phi), radius*sin(theta), radius*cos(theta)*sin(phi));
glVertex3f(radius*cos(theta+inc)*cos(phi), radius*sin(theta+inc), radius*cos(theta+inc)*sin(phi));
glVertex3f(radius*cos(theta+inc)*cos(phi+inc), radius*sin(theta+inc), radius*cos(theta+inc)*sin(phi+inc));
glVertex3f(radius*cos(theta)*cos(phi+inc), radius*sin(theta), radius*cos(theta)*sin(phi+inc));
glEnd();
}
}
glFlush();
}
b. Fungsi Display
Fungsi Display
bertanggung jawab untuk merender objek ke layar. Di dalam fungsi ini, kita menggambar bola wireframe dengan fungsi glutWireSphere
. Kemudian, objek tersebut diputar sedikit menggunakan glRotatef
untuk memberikan efek animasi rotasi.
void Display(void){
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0, 1.5, 0); // Warna bola hijau
glutWireSphere(1, 50, 50); // Menggambar bola wireframe dengan radius 1 dan 50 segmen
glRotatef(1, 1, 1, 1); // Memutar bola sedikit-sedikit
glFlush();
glutSwapBuffers();
glutPostRedisplay();
}
c. Fungsi reshape
Fungsi ini digunakan untuk menangani perubahan ukuran jendela. Dalam hal ini, kita menggunakan glOrtho
untuk mengatur proyeksi 2D ortografis dan gluLookAt
untuk mengatur posisi kamera dan orientasi objek yang akan digambar.
void reshape(int w, int h){
glViewport(0, 0, (GLsizei)w, (GLsizei)h); // Mengatur ukuran viewport
glMatrixMode(GL_PROJECTION); // Mengatur proyeksi
glLoadIdentity(); // Memulai matriks identitas
glMatrixMode(GL_MODELVIEW);
glOrtho(-1.5, 1.5, -1.5, 1.5, 1.5, 20); // Menentukan batas tampilan
gluLookAt(0, 0, 5, 0, 0, -100, 0.0, 1.0, 0.0); // Menentukan posisi kamera
}
d. Fungsi init
Fungsi init
digunakan untuk menginisialisasi pengaturan dasar OpenGL, seperti warna latar belakang dan mode tampilan.
void init(void){
glClearColor(0, 0, 0, 0); // Latar belakang hitam
glPolygonMode(GL_FRONT, GL_LINE); // Menampilkan wireframe untuk bagian depan
glPolygonMode(GL_BACK, GL_LINE); // Menampilkan wireframe untuk bagian belakang
}
3. Menjalankan Program
Untuk menjalankan program ini, lakukan langkah-langkah berikut:
-
Kompilasi dan Jalankan:
-
Kompilasi menggunakan IDE atau terminal dengan menggunakan GCC atau compiler lainnya yang mendukung OpenGL.
-
-
Hasil:
-
Program ini akan menggambar bola 3D menggunakan wireframe yang dapat diputar perlahan.
-
Bola akan berputar secara dinamis berkat perintah
glRotatef
yang diterapkan di dalam fungsiDisplay
.
-
4. Kesimpulan
Dengan mengikuti tutorial ini, Anda telah berhasil membuat bola 3D menggunakan OpenGL. Anda juga dapat mengembangkan program ini lebih lanjut dengan menambahkan fitur interaktivitas seperti rotasi bola berdasarkan input pengguna, pencahayaan, atau tekstur untuk membuat bola lebih realistis. Selamat mencoba!
Komentar
Posting Komentar