Membuat Sangkar Burung 3D dengan OpenGL GLUT

Dalam tutorial kali ini, kita akan belajar membuat model sangkar burung 3D sederhana menggunakan OpenGL dan GLUT. Sangkar ini dibuat dengan menggabungkan bentuk kerucut di atas dan tabung di bawah, menyerupai bentuk sangkar.

Berikut ini adalah contoh program C++ lengkapnya:

Source Code: Membuat Sangkar Burung

// Membuat Sangkar Burung
#include <windows.h>
#include <math.h>
#include <gl/glut.h>

#define PI 3.14

GLint circle_points = 40; // Banyaknya titik untuk membentuk lingkaran

// Fungsi untuk membuat kerucut (bagian atas sangkar)
void MyCone(GLfloat radius, GLfloat tinggi) {
    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(radius * cos(theta), 1, radius * sin(theta));
        glVertex3f(0, 0.8, 2); // Titik puncak kerucut
        glVertex3f(radius * cos(ntheta), 1, radius * sin(theta));
        glEnd();
    }
}

// Fungsi untuk membuat tabung (badan sangkar)
void MyTube(GLfloat radius, GLfloat tinggi) {
    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); // Titik pusat bawah
        glVertex3f(radius * cos(theta), 0, radius * sin(theta));
        glVertex3f(radius * cos(ntheta), 0, radius * sin(ntheta));
        glVertex3f(radius * cos(ntheta), tinggi, radius * sin(ntheta));
        glVertex3f(radius * cos(theta), tinggi, radius * sin(theta));
        glVertex3f(radius * cos(theta), 0, radius * sin(theta));
        glEnd();
    }
}

// Fungsi untuk menampilkan objek
void Display(void) {
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1, 1, 1); // Warna objek putih
    MyCone(0.5, 1); // Membuat kerucut
    MyTube(0.4, 1); // Membuat tabung
    glFlush();
}

// Fungsi reshape untuk menyesuaikan perspektif
void reshape(int w, int h) {
    glViewport(0, 0, (GLsizei)w, (GLsizei)h);
    glMatrixMode(GL_PROJECTION);
    glFrustum(-0.5 * (GLfloat)w/h, 0.5 * (GLfloat)w/h, -0.5, 0.5, 1, 20);
    gluLookAt(0, 0.5, 3, 0, 0, -100, 0, 1, 0);
}

// Fungsi inisialisasi awal
void init(void) {
    glClearColor(0, 0, 0, 0); // Latar belakang hitam
    glPolygonMode(GL_FRONT, GL_LINE); // Mode wireframe
    glPolygonMode(GL_BACK, GL_LINE);
}

// Fungsi utama
int main(int argc, char* argv[]) {
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(500, 500);
    glutInitWindowPosition(500, 200);
    glutCreateWindow("Sangkar Burung");
    init();
    glutDisplayFunc(Display);
    glutReshapeFunc(reshape);
    glutMainLoop();
}

Penjelasan Program

  • MyCone() : Membuat bentuk kerucut di bagian atas sangkar menggunakan 40 titik untuk menghasilkan bentuk yang halus.

  • MyTube() : Membuat bentuk tabung untuk badan sangkar, juga dengan 40 titik.

  • Display() : Memanggil kedua fungsi MyCone() dan MyTube() untuk menggambar seluruh sangkar.

  • reshape() : Mengatur viewport dan frustum agar objek 3D terlihat proporsional.

  • init() : Mengatur latar belakang hitam dan mode wireframe supaya hanya kerangka sangkar yang terlihat.

Hasil Output

Saat program dijalankan, akan tampil sebuah sangkar burung 3D berwarna putih di atas latar belakang hitam. Karena menggunakan mode wireframe, tampilannya hanya berupa garis-garis pembentuk bentuk tabung dan kerucut.

Codeblocks,Komputer Grafik,

Tips Pengembangan

  • Ingin sangkarnya solid? Ganti glPolygonMode(GL_FRONT, GL_FILL);.

  • Ingin sangkarnya berputar? Tambahkan rotasi di fungsi Display().

  • Bisa juga menambahkan burung kecil atau detail kawat menggunakan garis tambahan.

Komentar