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 sebesarangle
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();
}
📝 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
), makaroot
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
Posting Komentar