Tutorial OpenGL: Efek Objek Bergerak Memutar Seperempat Lingkaran

Hai, teman-teman pecinta grafika komputer! 👩‍💻👨‍💻

Kali ini kita akan membahas cara membuat efek animasi objek yang bergerak memutar mengikuti seperempat lingkaran (90 derajat) menggunakan fungsi glRotatef() dalam OpenGL.

Program ini dibuat menggunakan Code::Blocks + GLUT, sangat cocok untuk pemula yang sedang mempelajari transformasi dan animasi objek 2D!


📌 Apa yang Kita Buat?

Kita akan:

  • Menggambar persegi panjang hijau (sebagai objek statis),

  • Kemudian membuat animasi rotasi objek biru yang berputar secara dinamis sebesar 90 derajat (¼ lingkaran) lalu kembali dari awal.


🧠 Konsep Penting

  • glRotatef(angle, x, y, z) akan memutar objek sebesar angle derajat terhadap sumbu (x, y, z).

  • Dengan menambahkan sedikit demi sedikit sudut rotasi (root) di setiap frame, kita mendapatkan efek animasi rotasi.


💻 Kode Program Lengkap

// Memutar obyek (efek obyek bergerak memutar 1/4 lingkaran)

#include<windows.h>
#include<gl/glut.h>

GLint rotdir;       // Arah rotasi
GLdouble root;      // Sudut rotasi saat ini

void Display()
{
    glClear(GL_COLOR_BUFFER_BIT);

    // Gambar persegi panjang hijau sebagai objek statis
    glColor3f(0.0, 1.0, 0.0);
    glRectf(80., 10., 200., 20.);

    // Hitung rotasi animasi
    glColor3f(0.0, 0.0, 1.0);
    root = root + rotdir * 0.01;
    if (root >= 91)  // Maksimal 90 derajat
        root = 0;

    // Terapkan rotasi ke objek biru
    glLoadIdentity();
    glRotatef(root, 0, 0, 1);
    glRectf(80., 10., 200., 20.);

    glutSwapBuffers();        // Ganti buffer (karena menggunakan double buffering)
    glutPostRedisplay();      // Gambar ulang (loop animasi)
    glFlush();
}

void reshape(int w, int h){
    glViewport(0, 0, (GLsizei)w, (GLsizei)h);
    glMatrixMode(GL_PROJECTION);
    gluOrtho2D(0, 320, 0, 240); // Koordinat 2D
    glMatrixMode(GL_MODELVIEW);
}

void init(void){
    glClearColor(1.0, 0.0, 0.0, 1.0); // Background merah
    rotdir = 1;  // Rotasi searah jarum jam
    root = 0;    // Sudut awal
}

int main(int argc, char* argv[]){
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
    glutInitWindowSize(320, 240);
    glutCreateWindow("Obyek Bergerak Memutar");
    init();
    glutDisplayFunc(Display);
    glutReshapeFunc(reshape);
    glutMainLoop();
}
Codeblocks,Komputer Grafik,
Codeblocks,Komputer Grafik,

📝 Penjelasan

  • root adalah variabel sudut rotasi yang terus bertambah tiap frame.

  • rotdir menentukan arah rotasi (positif berarti searah jarum jam).

  • Ketika rotasi melebihi 90 derajat (root >= 91), maka root direset menjadi 0 agar animasi bisa berulang dari awal.

  • Double buffering (GLUT_DOUBLE) membuat animasi halus tanpa flicker.


⚙️ Eksperimen Lanjutan

Kamu bisa mencoba hal berikut:

  • Ubah batas root dari 91 jadi 360 untuk satu lingkaran penuh.

  • Tambahkan glTranslatef() sebelum rotasi untuk mengubah titik pusat rotasi.

  • Coba buat agar objek tidak hanya berputar tapi juga berubah ukuran (glScalef()).


✅ Kesimpulan

Dengan kode sederhana ini, kita bisa membuat animasi objek yang bergerak memutar secara dinamis. Teknik seperti ini penting sebagai dasar membuat simulasi rotasi, permainan 2D, maupun animasi antarmuka pengguna.

Semoga bermanfaat dan selamat bereksperimen!
Kalau ingin lanjut ke rotasi penuh atau interaksi dengan keyboard, tinggal komen ya 😄

Komentar