Membuat Objek Botol 3D Menggunakan OpenGL di Code::Blocks

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 dan cos-sin

  • Mengatur kamera dan perspektif tampilan 3D


📌 Struktur Program

Program terdiri dari beberapa bagian utama:

  1. Fungsi Lingkaran(): Menggambar lingkaran sebagai bagian dasar dan tutup botol.

  2. Fungsi Botol(): Membentuk sisi botol dengan poligon berdasarkan dua radius berbeda.

  3. Fungsi Display(): Menampilkan keseluruhan objek.

  4. Fungsi reshape() dan init(): 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();
}
Codeblocks,Komputer Grafik,

🖼️ 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 dan radius2 pada fungsi Botol() 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