Halo teman-teman! 👋
Pada postingan kali ini, kita akan belajar bagaimana cara membuat objek botol 3D sederhana menggunakan OpenGL di Code::Blocks. Program ini merupakan dasar dari pembuatan objek 3D dengan pendekatan poligon dan lingkaran yang disusun secara vertikal.
🧰 Perlengkapan yang Dibutuhkan
-
IDE: Code::Blocks
-
Library: OpenGL (GLUT)
-
Sistem operasi: Windows
🎯 Apa yang Akan Kita Pelajari?
-
Cara membuat objek 3D dengan bentuk tabung menyempit menyerupai botol
-
Menggambar lingkaran menggunakan
glVertex
dancos-sin
-
Mengatur kamera dan perspektif tampilan 3D
📌 Struktur Program
Program terdiri dari beberapa bagian utama:
-
Fungsi
Lingkaran()
: Menggambar lingkaran sebagai bagian dasar dan tutup botol. -
Fungsi
Botol()
: Membentuk sisi botol dengan poligon berdasarkan dua radius berbeda. -
Fungsi
Display()
: Menampilkan keseluruhan objek. -
Fungsi
reshape()
daninit()
: Mengatur perspektif dan warna latar.
💻 Kode Lengkap
// Membuat Botol
#include <windows.h>
#include <math.h>
#include <gl/glut.h>
#define PI 3.14
GLint circle_points = 30;
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); // Warna putih
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);
// Bentuk sisi botol
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, 1, 1);
// Menampilkan botol
Botol(1, 0.5);
// Menampilkan lingkaran dasar dan bagian atas
Lingkaran(0, 0, 0, 1); // Dasar
Lingkaran(0, 2, 0, 1); // Leher bawah
Lingkaran(0, 3, 0, 0.5); // Leher atas
Lingkaran(0, 4, 0, 0.5); // Tutup
glFlush();
}
void reshape(int w, int h) {
glViewport(0, 0, (GLsizei)w, (GLsizei)h);
glMatrixMode(GL_PROJECTION);
glFrustum(-(GLfloat)w / h, (GLfloat)w / h, -1, 1, 1, 20);
gluLookAt(0, 1.5, 3, 0, 0, -100, 0, 1, 0);
}
void init(void) {
glClearColor(0, 0, 0, 0); // Latar belakang hitam
glLineWidth(1.5); // Ketebalan garis
glPolygonMode(GL_FRONT, GL_LINE);
glPolygonMode(GL_BACK, GL_LINE);
}
int main(int argc, char* argv[]) {
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(400, 250);
glutCreateWindow("Botol");
init();
glutDisplayFunc(Display);
glutReshapeFunc(reshape);
glutMainLoop();
}
🖼️ Hasil yang Ditampilkan
Program akan menggambar objek menyerupai botol menggunakan garis poligon terbuka dan beberapa lingkaran horizontal. Tampilan di layar adalah wireframe (kerangka garis) putih dengan latar belakang hitam, membentuk botol 3D yang sederhana.
💡 Tips Eksperimen
-
Ubah nilai
radius1
danradius2
pada fungsiBotol()
untuk melihat variasi bentuk botol. -
Coba ubah warna latar belakang dengan
glClearColor()
. -
Ingin tampilan lebih halus? Tambahkan jumlah
circle_points
.
🧠Kesimpulan
Membuat objek 3D sederhana seperti botol tidaklah sulit dengan OpenGL. Dengan memahami konsep lingkaran, loop, dan transformasi tampilan 3D, kamu bisa membentuk objek-objek yang lebih kompleks di masa depan, seperti vas bunga, gelas, atau bahkan karakter 3D!
Teruslah bereksperimen dan selamat mencoba! 🚀
Komentar
Posting Komentar