Membuat Program Kerucut dengan OpenGL: Tutorial Lengkap

Pada artikel ini, kita akan belajar bagaimana membuat program OpenGL untuk menggambar sebuah kerucut 3D. Kerucut ini akan digambar menggunakan segitiga untuk membentuk alas dan sisi kerucut. Kita juga akan memberikan penjelasan mendalam tentang setiap bagian kode, serta hasil yang bisa Anda harapkan saat menjalankan program ini.

Persiapan

Sebelum memulai, pastikan Anda sudah menginstal OpenGL dan GLUT pada sistem Anda. Program ini menggunakan GLUT (OpenGL Utility Toolkit) untuk menangani windowing dan interaksi pengguna, serta OpenGL untuk menggambar objek 3D.

Full Code Program

Berikut adalah kode lengkap untuk membuat kerucut menggunakan OpenGL:

#include<windows.h>
#include<math.h>
#include<gl\glut.h>
#define PI 3.14

GLint circle_points = 40;  // Jumlah titik pada lingkaran basis kerucut

// Fungsi untuk menggambar kerucut
void MyCone(GLfloat radius, GLfloat tinggi){
    GLint i;
    GLdouble theta, ntheta;
    
    // Membuat beberapa segitiga untuk kerucut
    for(i = 0; i < circle_points; i++){
        glBegin(GL_POLYGON);
        
        // Menentukan sudut untuk tiap titik pada lingkaran
        theta = (2 * PI * i / circle_points);
        ntheta = (2 * PI * (i + 1) / circle_points);
        
        // Menambahkan vertex untuk membuat segitiga pada kerucut
        glVertex3f(radius * cos(theta), 0, radius * sin(theta));   // Titik 1
        glVertex3f(0, tinggi, 0);  // Titik apex (puncak) kerucut
        glVertex3f(radius * cos(ntheta), 0, radius * sin(ntheta));  // Titik 2
        
        glEnd();
    }
}

// Fungsi untuk menampilkan objek
void Display(void){
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0, 1.0, 1.0);  // Warna putih untuk objek
    
    // Menggambar bola wireframe dengan glut
    glutWireSphere(0, 20, 10);
    
    // Melakukan rotasi sedikit pada objek
    glRotatef(0.05, 0, 0, 1);
    
    // Memanggil fungsi untuk menggambar kerucut
    MyCone(0.5, 1);
    
    glFlush();
    glutSwapBuffers();
    glutPostRedisplay();
}

// Fungsi untuk menangani perubahan ukuran jendela
void reshape(int w, int h){
    glViewport(0, 0, (GLsizei)w, (GLsizei)h);  // Menyesuaikan viewport dengan ukuran jendela
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glMatrixMode(GL_MODELVIEW);
    glOrtho(-1.5, 1.5, -1.5, 1.5, 1.5, 20);  // Menentukan proyeksi ortogonal
    gluLookAt(0, 0, 3, 0, 0, -100, 0., 1., 0.);  // Menyusun kamera
}

// Fungsi untuk inisialisasi parameter-parameter OpenGL
void init(void){
    glClearColor(0, 0, 0, 0);  // Mengatur latar belakang menjadi hitam
    glPolygonMode(GL_FRONT, GL_LINE);  // Menampilkan garis untuk sisi depan
    glPolygonMode(GL_BACK, GL_LINE);   // Menampilkan garis untuk sisi belakang
}

// Fungsi utama program
int main(int argc, char* argv[]){
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);  // Mengatur mode tampilan
    glutInitWindowSize(450, 450);  // Menentukan ukuran jendela
    glutInitWindowPosition(500, 200);  // Menentukan posisi jendela
    glutCreateWindow("TM12-Kerucut");  // Membuat jendela dengan judul
    init();  // Inisialisasi OpenGL
    glutDisplayFunc(Display);  // Menentukan fungsi untuk menampilkan objek
    glutReshapeFunc(reshape);  // Menentukan fungsi untuk menangani perubahan ukuran jendela
    glutMainLoop();  // Memulai loop glut
}

Penjelasan Kode Program

  1. Header Files

    • windows.h: Untuk mengakses fungsi-fungsi sistem operasi Windows.

    • math.h: Untuk fungsi matematika seperti cos dan sin, digunakan untuk perhitungan sudut.

    • glut.h: Pustaka GLUT yang menangani tampilan, jendela, dan interaksi pengguna di OpenGL.

  2. Deklarasi Konstanta dan Variabel

    • PI: Digunakan untuk menghitung nilai sudut dalam radian.

    • circle_points: Menentukan jumlah segmen yang digunakan untuk menggambar lingkaran alas kerucut.

  3. Fungsi MyCone Fungsi ini menggambar kerucut dengan menggunakan segitiga. Setiap segitiga menghubungkan dua titik pada lingkaran dengan puncak kerucut.

    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), 0, radius * sin(theta));
            glVertex3f(0, tinggi, 0);
            glVertex3f(radius * cos(ntheta), 0, radius * sin(ntheta));
            glEnd();
        }
    }
    
  4. Fungsi Display Fungsi ini mengatur pembersihan layar, menggambar objek-objek (seperti bola dan kerucut), serta melakukan rotasi objek untuk menghasilkan efek gerakan.

    void Display(void){
        glClear(GL_COLOR_BUFFER_BIT);  // Membersihkan buffer warna
        glColor3f(1.0, 1.0, 1.0);     // Mengatur warna objek menjadi putih
        glutWireSphere(0, 20, 10);    // Menggambar bola wireframe
        glRotatef(0.05, 0, 0, 1);     // Memutar objek sedikit
        MyCone(0.5, 1);               // Memanggil fungsi untuk menggambar kerucut
        glFlush();
        glutSwapBuffers();            // Menukar buffer untuk menghasilkan tampilan akhir
        glutPostRedisplay();          // Meminta tampilan di-refresh
    }
    
  5. Fungsi reshape Fungsi ini digunakan untuk menangani perubahan ukuran jendela dan memastikan tampilan objek tetap proporsional.

    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, 3, 0, 0, -100, 0., 1., 0.);
    }
    
  6. Fungsi init Fungsi ini digunakan untuk menginisialisasi parameter OpenGL seperti pengaturan latar belakang dan mode polygon.

    void init(void){
        glClearColor(0, 0, 0, 0);  // Mengatur latar belakang menjadi hitam
        glPolygonMode(GL_FRONT, GL_LINE);  // Menampilkan garis untuk sisi depan
        glPolygonMode(GL_BACK, GL_LINE);   // Menampilkan garis untuk sisi belakang
    }
    
  7. Fungsi main Fungsi utama yang memulai program dengan membuat jendela, menginisialisasi OpenGL, dan menjalankan loop GLUT.

    int main(int argc, char* argv[]){
        glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
        glutInitWindowSize(450, 450);
        glutInitWindowPosition(500, 200);
        glutCreateWindow("TM12-Kerucut");
        init();
        glutDisplayFunc(Display);
        glutReshapeFunc(reshape);
        glutMainLoop();
    }
    

Hasil Program

Ketika Anda menjalankan program ini, Anda akan melihat:

  • Sebuah kerucut 3D dengan basis lingkaran yang terdiri dari beberapa segmen segitiga.

  • Kerucut ini akan berputar sedikit berkat rotasi yang diterapkan di fungsi Display.

  • Latar belakang aplikasi adalah hitam, dengan objek kerucut yang digambar dalam mode wireframe (garis).

  • Selain itu, program juga menampilkan bola wireframe sebagai objek tambahan.

Membuat Program Kerucut dengan OpenGL: Tutorial Lengkap


Membuat Program Kerucut dengan OpenGL: Tutorial Lengkap

Kesimpulan

Dengan menggunakan kode di atas, Anda dapat menggambar objek kerucut 3D menggunakan OpenGL. Program ini sangat berguna untuk memahami cara menggambar objek geometris menggunakan segitiga dan mengatur proyeksi serta tampilan objek dalam ruang 3D. Selamat mencoba!

Komentar