Membuat Bola 3D Wireframe dengan OpenGL

Program ini menggambar bola 3D menggunakan OpenGL, dengan bola yang dapat diputar sedikit demi sedikit. Mari kita bahas bagian-bagian penting dari kode ini untuk memahami cara kerjanya.

Penjelasan Kode

1. Fungsi Bola

Fungsi ini digunakan untuk menggambar bola menggunakan banyak poligon segi empat. Bola dihitung menggunakan dua sudut: theta dan phi. Fungsi ini membuat bola dengan membagi bola menjadi banyak potongan yang digambar dengan menggunakan 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();
}
  • theta dan phi adalah sudut yang digunakan untuk menghitung posisi setiap titik pada permukaan bola.

  • glVertex3f digunakan untuk menggambar titik-titik pada bola berdasarkan koordinat 3D.

  • GL_POLYGON digunakan untuk menggambar setiap segi empat sebagai poligon.

2. Fungsi Display

Fungsi Display menggambar bola dan memberikan rotasi pada objek bola secara bertahap.

void Display(void) {
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0, 1.0, 1.0);  // Warna bola putih
    glutWireSphere(0.5, 25, 10);  // Bola wireframe dengan radius 0.5
    glRotatef(0.05, 1, 0, 0);     // Memutar bola sedikit per frame
    glFlush();
    glutSwapBuffers();
    glutPostRedisplay();
}
  • glutWireSphere(0.5, 25, 10) menggambar bola wireframe dengan radius 0.5, menggunakan 25 segmen untuk merender bola.

  • glRotatef(0.05, 1, 0, 0) memberikan efek rotasi pada bola setiap kali fungsi dipanggil, yang menghasilkan animasi bola berputar sedikit demi sedikit.

3. Fungsi reshape

Fungsi ini menangani perubahan ukuran jendela dan mengatur proyeksi untuk menggambar bola dengan perspektif yang benar.

void reshape(int w, int h) {
    glViewport(0, 0, (GLsizei)w, (GLsizei)h);  // Menyesuaikan ukuran viewport dengan ukuran jendela
    glMatrixMode(GL_PROJECTION);  // Mengatur mode proyeksi
    glLoadIdentity();  // Reset matriks proyeksi
    glMatrixMode(GL_MODELVIEW);
    glOrtho(-1.5, 1.5, -1.5, 1.5, 1.5, 20);  // Menentukan batas tampilan 2D ortografis
    gluLookAt(0, 0, 3, 0, 0, -100, 0.0, 1.0, 0.0);  // Menetapkan posisi kamera
}
  • glOrtho digunakan untuk menentukan tampilan objek dalam proyeksi ortografis.

  • gluLookAt mengatur posisi kamera sehingga kita dapat melihat objek dengan sudut pandang yang benar.

4. Fungsi init

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

void init(void) {
    glClearColor(0, 0, 0, 0);  // Mengatur latar belakang menjadi hitam
    glPolygonMode(GL_FRONT, GL_LINE);  // Menampilkan objek sebagai wireframe di sisi depan
    glPolygonMode(GL_BACK, GL_LINE);   // Menampilkan objek sebagai wireframe di sisi belakang
}

5. Fungsi main

Fungsi utama program ini mengatur pengaturan GLUT, membuat jendela, dan memulai loop rendering.

int main(int argc, char* argv[]) {
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(450, 450);  // Ukuran jendela 450x450
    glutInitWindowPosition(500, 200);  // Posisi jendela
    glutCreateWindow("Tugas TM12");  // Membuat jendela dengan nama "Tugas TM12"
    init();
    glutDisplayFunc(Display);  // Menetapkan fungsi display
    glutReshapeFunc(reshape);  // Menetapkan fungsi reshape
    glutMainLoop();  // Memulai loop utama GLUT
}

Menjalankan Program

  1. Komplikasi: Anda perlu mengkompilasi kode ini menggunakan compiler yang mendukung OpenGL dan GLUT.

    • Misalnya, jika menggunakan GCC di terminal, gunakan perintah seperti:

      gcc -o bola3D bola3D.c -lGL -lGLU -lglut
      
  2. Jalankan: Setelah dikompilasi, jalankan aplikasi yang dihasilkan.

    • Program ini akan membuka jendela dengan bola yang berputar sedikit demi sedikit.

Codeblocks,Komputer Grafik,
Codeblocks,Komputer Grafik,

Kesimpulan

Program ini menggambar bola 3D yang berputar menggunakan OpenGL. Anda bisa mengubah parameter seperti ukuran bola atau kecepatan rotasi untuk melihat efek yang berbeda. Jika ingin menambahkan lebih banyak interaktivitas, Anda bisa menghubungkan rotasi dengan input pengguna (misalnya dengan menggunakan tombol atau mouse).


Komentar