Membuat Objek 3D Botol Menggunakan OpenGL
Dalam tutorial kali ini, kita akan membuat objek 3D berupa botol menggunakan OpenGL. Program ini menggambar objek botol secara sederhana dengan teknik wireframe (hanya menampilkan garis-garis luar objek), yang memungkinkan kita untuk melihat struktur dasar botol tersebut dari berbagai sudut pandang.
Mari kita mulai dengan langkah-langkah berikut:
1. Persiapan dan Instalasi
Sebelum memulai, pastikan Anda memiliki OpenGL dan GLUT terinstal di sistem Anda. GLUT (OpenGL Utility Toolkit) adalah library yang mempermudah pembuatan aplikasi grafis 3D menggunakan OpenGL. Jika Anda menggunakan Windows, Anda bisa mengunduh GLUT dari situs resminya atau melalui paket yang disediakan oleh IDE seperti Code::Blocks.
2. Struktur Program
Berikut adalah kode lengkap untuk menggambar botol 3D menggunakan OpenGL:
#include<windows.h>
#include<math.h>
#include<gl/glut.h>
#define PI 3.14
GLint circle_points = 40;
void Lingkaran(GLfloat px, GLfloat py, GLfloat pz, GLfloat r){
GLint i;
GLdouble sudut;
glBegin(GL_LINE_STRIP);
for(i = 0; i < circle_points; i++){
sudut = 2 * PI * i / circle_points;
glColor3f(1, 1, 1);
glVertex3f(px + r * cos(sudut), py, pz + r * sin(sudut));
}
glEnd();
}
void Botol(GLfloat radius1, GLfloat radius2){
GLint i;
GLdouble theta, ntheta;
for(i = 0; i < circle_points; i++){
glBegin(GL_POLYGON);
theta = (2 * PI * i / circle_points);
ntheta = (2 * PI * (i + 1) / circle_points);
glVertex3f(0, 0, 0);
glVertex3f(radius1 * cos(theta), 0, radius1 * sin(theta));
glVertex3f(radius1 * cos(ntheta), 0, radius1 * sin(ntheta));
glVertex3f(radius1 * cos(ntheta), 2, radius1 * sin(ntheta));
glVertex3f(radius2 * cos(ntheta), 3, radius2 * sin(ntheta));
glVertex3f(radius2 * cos(ntheta), 4, radius2 * sin(ntheta));
glVertex3f(radius2 * cos(theta), 4, radius2 * sin(theta));
glVertex3f(radius2 * cos(theta), 3, radius2 * sin(theta));
glVertex3f(radius1 * cos(theta), 2, radius1 * sin(theta));
glVertex3f(radius1 * cos(theta), 0, radius1 * sin(theta));
glEnd();
}
}
void Display(void){
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
glutWireSphere(0, 20, 10);
glRotatef(0.05, 0, 1, 0);
Botol(1, 0.5);
Lingkaran(0, 0, 0, 1);
Lingkaran(0, 2, 0, 1);
Lingkaran(0, 3, 0, 0.5);
Lingkaran(0, 4, 0, 0.5);
glFlush();
glutSwapBuffers();
glutPostRedisplay();
}
void reshape(int w, int h){
glViewport(0, 0, (GLsizei)w, (GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glOrtho(-3, 3, -1, 4, 1.5, 20);
gluLookAt(0, 0.5, 3, 0, 0, -100, 0, 1, 0);
}
void init(void){
glClearColor(0, 0, 0, 0);
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("TM12-Botol");
init();
glutDisplayFunc(Display);
glutReshapeFunc(reshape);
glutMainLoop();
}
3. Penjelasan Kode
a. Lingkaran
Fungsi Lingkaran
digunakan untuk menggambar lingkaran pada posisi dan radius tertentu. Fungsi ini menggunakan GL_LINE_STRIP
untuk menggambar garis lingkaran.
void Lingkaran(GLfloat px, GLfloat py, GLfloat pz, GLfloat r){
GLint i;
GLdouble sudut;
glBegin(GL_LINE_STRIP);
for(i = 0; i < circle_points; i++){
sudut = 2 * PI * i / circle_points;
glColor3f(1, 1, 1);
glVertex3f(px + r * cos(sudut), py, pz + r * sin(sudut));
}
glEnd();
}
b. Botol
Fungsi Botol
menggambar bagian utama botol menggunakan banyak segi banyak yang terhubung dalam bentuk poligon untuk menciptakan ilusi botol 3D.
void Botol(GLfloat radius1, GLfloat radius2){
GLint i;
GLdouble theta, ntheta;
for(i = 0; i < circle_points; i++){
glBegin(GL_POLYGON);
theta = (2 * PI * i / circle_points);
ntheta = (2 * PI * (i + 1) / circle_points);
...
glEnd();
}
}
c. Fungsi Display
Fungsi Display
bertanggung jawab untuk merender objek 3D ke layar, memutar objek secara perlahan dan menggambar botol serta lingkaran-lingkaran.
void Display(void){
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
glutWireSphere(0, 20, 10);
glRotatef(0.05, 0, 1, 0);
Botol(1, 0.5);
Lingkaran(0, 0, 0, 1);
Lingkaran(0, 2, 0, 1);
Lingkaran(0, 3, 0, 0.5);
Lingkaran(0, 4, 0, 0.5);
glFlush();
glutSwapBuffers();
glutPostRedisplay();
}
d. Fungsi reshape
Fungsi reshape
digunakan untuk menangani perubahan ukuran jendela sehingga tampilan tetap proporsional.
void reshape(int w, int h){
glViewport(0, 0, (GLsizei)w, (GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glOrtho(-3, 3, -1, 4, 1.5, 20);
gluLookAt(0, 0.5, 3, 0, 0, -100, 0, 1, 0);
}
4. Menjalankan Program
-
Kompilasi dan Jalankan:
-
Kompilasi program menggunakan IDE atau terminal.
-
Setelah dijalankan, sebuah jendela akan terbuka dan Anda akan melihat botol 3D wireframe yang perlahan berputar.
-
-
Visualisasi:
-
Program ini akan menggambar botol 3D dalam mode wireframe yang akan berputar untuk menunjukkan perspektif objek dari berbagai sudut.
-
5. Hasil Program
Hasil program ini akan menampilkan botol 3D yang digambar menggunakan garis-garis (wireframe) di layar. Botol akan sedikit berputar untuk memberikan tampilan 3D yang dinamis. Ada juga beberapa lingkaran yang menggambarkan bagian bawah, tengah, dan leher botol. Ini memberi kesan kedalaman dan bentuk yang lebih kompleks meskipun menggunakan grafik dasar.
Kesimpulan
Dengan mengikuti tutorial ini, Anda telah belajar bagaimana membuat objek 3D sederhana seperti botol menggunakan OpenGL dan GLUT. Meskipun program ini menggunakan wireframe, Anda bisa mengembangkannya lebih lanjut dengan menambahkan shading, tekstur, atau interaktivitas untuk menciptakan tampilan yang lebih menarik.
Semoga tutorial ini bermanfaat dan selamat mencoba!
Komentar
Posting Komentar