Membuat Bola 3D Wireframe Berputar Menggunakan OpenGL

Membuat Bola 3D dengan OpenGL

Dalam tutorial ini, kita akan membuat objek bola 3D menggunakan OpenGL. Kita akan menggambar bola menggunakan poligon yang dihitung dari dua parameter sudut: theta dan phi. Program ini menggunakan GLUT untuk mengatur tampilan dan interaktivitas di layar.

Berikut adalah penjelasan tentang kode yang telah Anda berikan.


1. Struktur Program

Berikut adalah kode lengkap untuk menggambar bola 3D menggunakan OpenGL:

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

void Bola(GLfloat radius)
{
    GLdouble inc = PI/12;
    GLdouble theta, phi;

    for (theta=-PI/2; theta<(PI/2-inc); theta+=inc){
        for (phi=0; phi<2*PI; phi+=inc){
            glBegin(GL_POLYGON);
                glVertex3f(radius*cos(theta)*cos(phi), radius*sin(theta), radius*cos(theta)*sin(phi));
                glVertex3f(radius*cos(theta+inc)*cos(phi), radius*sin(theta+inc), radius*cos(theta+inc)*sin(phi));
                glVertex3f(radius*cos(theta+inc)*cos(phi+inc), radius*sin(theta+inc), radius*cos(theta+inc)*sin(phi+inc));
                glVertex3f(radius*cos(theta)*cos(phi+inc), radius*sin(theta), radius*cos(theta)*sin(phi+inc));
            glEnd();
        }
    }
    glFlush();
}

void Display(void){
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(0, 1.5, 0);
    glutWireSphere(1, 50, 50);  // Menggambar bola wireframe
    glRotatef(1, 1, 1, 1);      // Memutar objek bola secara perlahan
    glFlush();
    glutSwapBuffers();
    glutPostRedisplay();
}

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, 5, 0, 0, -100, 0.0, 1.0, 0.0);
}

void init(void){
    glClearColor(0, 0, 0, 0);   // Latar belakang hitam
    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("TM14 - Bola 3D");
    init();
    glutDisplayFunc(Display);
    glutReshapeFunc(reshape);
    glutMainLoop();
}

2. Penjelasan Kode

a. Fungsi Bola

Fungsi Bola digunakan untuk menggambar bola 3D. Bola digambar menggunakan banyak poligon segi empat yang dibentuk oleh dua parameter sudut: theta dan phi. Fungsi ini menggunakan dua loop untuk menghitung posisi titik-titik pada bola berdasarkan parameter sudut tersebut, dan kemudian menggambar setiap poligon dengan glVertex3f.

void Bola(GLfloat radius)
{
    GLdouble inc = PI/12;  // Interval sudut
    GLdouble theta, phi;

    for (theta=-PI/2; theta<(PI/2-inc); theta+=inc){
        for (phi=0; phi<2*PI; phi+=inc){
            glBegin(GL_POLYGON);
                glVertex3f(radius*cos(theta)*cos(phi), radius*sin(theta), radius*cos(theta)*sin(phi));
                glVertex3f(radius*cos(theta+inc)*cos(phi), radius*sin(theta+inc), radius*cos(theta+inc)*sin(phi));
                glVertex3f(radius*cos(theta+inc)*cos(phi+inc), radius*sin(theta+inc), radius*cos(theta+inc)*sin(phi+inc));
                glVertex3f(radius*cos(theta)*cos(phi+inc), radius*sin(theta), radius*cos(theta)*sin(phi+inc));
            glEnd();
        }
    }
    glFlush();
}

b. Fungsi Display

Fungsi Display bertanggung jawab untuk merender objek ke layar. Di dalam fungsi ini, kita menggambar bola wireframe dengan fungsi glutWireSphere. Kemudian, objek tersebut diputar sedikit menggunakan glRotatef untuk memberikan efek animasi rotasi.

void Display(void){
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(0, 1.5, 0);  // Warna bola hijau
    glutWireSphere(1, 50, 50);  // Menggambar bola wireframe dengan radius 1 dan 50 segmen
    glRotatef(1, 1, 1, 1);  // Memutar bola sedikit-sedikit
    glFlush();
    glutSwapBuffers();
    glutPostRedisplay();
}

c. Fungsi reshape

Fungsi ini digunakan untuk menangani perubahan ukuran jendela. Dalam hal ini, kita menggunakan glOrtho untuk mengatur proyeksi 2D ortografis dan gluLookAt untuk mengatur posisi kamera dan orientasi objek yang akan digambar.

void reshape(int w, int h){
    glViewport(0, 0, (GLsizei)w, (GLsizei)h);  // Mengatur ukuran viewport
    glMatrixMode(GL_PROJECTION);  // Mengatur proyeksi
    glLoadIdentity();  // Memulai matriks identitas
    glMatrixMode(GL_MODELVIEW);
    glOrtho(-1.5, 1.5, -1.5, 1.5, 1.5, 20);  // Menentukan batas tampilan
    gluLookAt(0, 0, 5, 0, 0, -100, 0.0, 1.0, 0.0);  // Menentukan posisi kamera
}

d. Fungsi init

Fungsi init digunakan untuk menginisialisasi pengaturan dasar OpenGL, seperti warna latar belakang dan mode tampilan.

void init(void){
    glClearColor(0, 0, 0, 0);   // Latar belakang hitam
    glPolygonMode(GL_FRONT, GL_LINE);  // Menampilkan wireframe untuk bagian depan
    glPolygonMode(GL_BACK, GL_LINE);   // Menampilkan wireframe untuk bagian belakang
}

3. Menjalankan Program

Untuk menjalankan program ini, lakukan langkah-langkah berikut:

  1. Kompilasi dan Jalankan:

    • Kompilasi menggunakan IDE atau terminal dengan menggunakan GCC atau compiler lainnya yang mendukung OpenGL.

  2. Hasil:

    • Program ini akan menggambar bola 3D menggunakan wireframe yang dapat diputar perlahan.

    • Bola akan berputar secara dinamis berkat perintah glRotatef yang diterapkan di dalam fungsi Display.

Codeblocks,Informatika,Komputer Grafik,Pemrograman C++,

Codeblocks,Informatika,Komputer Grafik,Pemrograman C++,

4. Kesimpulan

Dengan mengikuti tutorial ini, Anda telah berhasil membuat bola 3D menggunakan OpenGL. Anda juga dapat mengembangkan program ini lebih lanjut dengan menambahkan fitur interaktivitas seperti rotasi bola berdasarkan input pengguna, pencahayaan, atau tekstur untuk membuat bola lebih realistis. Selamat mencoba!


Komentar