Selasa, 30 April 2013

Implentasi Animasi 2D pada OpenGL


Animasi adalah salah satu elemen multimedia yang memang sangat menarik, Sebab, ia mampu membuat sesuatu seolah-olah bergerak. Padahal animasi adalah rangkaian sejumlah gambar yang ditampilkan secara bergantian. Animasi tidak hanya berguna untuk film saja.Dalam dunia situs web, animasi digunakan untuk memberikan sentuhan manis pada situs. Bahkan bagi dunia pendidikan, animasi juga dapat digunakan sebagai alat bantu untuk menjelaskan sesuatu agar orang yang diajar bias lebih memahami maksud suatu konsep.
Kata “animasi` sebenarnya adalah penyesuaian dari kata “animation”, yang berasal dari kata dasar “to animate” yang dalam kamus umum Inggris-Indonesia berarti “menghidupkan”. Secara umum, animasi merupakan suatu kegiatan menghidupkan atau menggerakkan benda mati. Maksudnya, sebuah benda mati diberikan dorongan kekuatan, semangat, dan emosi untuk menjadi hidup dan bergerak atau hanya berkesan hidup.


Animasi pada open GL yang bergerak adalah koordinatnya (frame rate). Animasi didalam open GL yaitu menggunakan fungsi timer.
GLUTAPI void APIENTRY glutTimerFunc(unsignedint millis, void (GLUTCALLBACK *func)(int value), int value);
Dalam penggunaan glutTimerFunc dimungkinkan untuk membuat sebuah animasi yang dikontrol oleh waktu.
Perbandingan waktu dengan kecepatan:


Berikut akan diberikan contoh untuk membuat kapal yang bergerak dari titik 0,0 lalu bergerak ke arah sumbu x positif lalu berbalik ke sumbu x negatif.
Pertama kita buat bentuk kapal terlebih dahulu 
void Kapal()
{
     glBegin(GL_QUADS);
           glColor3f (1,0.5,0.5);
           glVertex2i (-75, 50);
           glVertex2i (75, 50);
           glVertex2i (50, 0);
           glVertex2i (-50, 0);
     glEnd();
}
Kapal dibuat dengan menggunakan GL_QUADS karena memiliki 4 titik, bangunnya seperti trapesium sama kaki.

Lalu kita buat layarnya agar terlihat seperti kapal dengan menggunakan GL_TRIANGLES, scriptnya seperti dibawah ini
void layar ()
{
     glBegin(GL_TRIANGLES);
           glVertex2i (0,50);
           glVertex2i (0,90);
           glVertex2i (50,70);
     glEnd();
}

Lalu kita buat lautnya agar terlihat biru seperti berada diatas air , dengan menggunakan GL_QUADS, scriptnya seperti dibawah ini
void Laut ()
{
     glBegin(GL_QUADS);
           glVertex2i (-320, 0);
           glVertex2i (320,0 );
           glVertex2i (320, -320);
           glVertex2i (-320, -320);
     glEnd();
}

Lalu untuk menggerakkan kapalnya digunakan fungsi timer.
Untuk lebih jelas berikut script lengkapnya

#include <stdlib.h>
#include <glut.h>
int r = 0;
int ujung = 0;

void timer (int value)
{
    
     if (r<320 && ujung == 0)
     {
           r++;
           if (r == 320){
                 ujung = 1;}
     }
     else if (ujung == 1 && r>-320)
     {
           r--;
           if(r==-320){
                 ujung = 0;}
     }

     glutPostRedisplay();
     glutTimerFunc(10,timer,0);
}

void Kapal()
{
     glBegin(GL_QUADS);
           glColor3f (1,0.5,0.5);
           glVertex2i (-75, 50);
           glVertex2i (75, 50);
           glVertex2i (50, 0);
           glVertex2i (-50, 0);
     glEnd();
}

void Laut ()
{
     glBegin(GL_QUADS);
           glColor3f (0,1,1);
           glVertex2i (-320, 0);
           glVertex2i (320,0 );
           glVertex2i (320, -320);
           glVertex2i (-320, -320);
     glEnd();
}
void layar ()
{
     glBegin(GL_TRIANGLES);
           glVertex2i (0,50);
           glVertex2i (0,90);
           glVertex2i (50,70);
     glEnd();
}
void renderScene(){
     glClear(GL_COLOR_BUFFER_BIT);
           glPushMatrix();
                 glTranslatef(r,0,0);
                 Kapal();
                 layar();
           glPopMatrix();
           Laut();
          
     glFlush();
}

void main(int argc, char **argv){
     glutInit(&argc, argv);

     glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
     glutInitWindowPosition(100,100);
     glutInitWindowSize(640,480);
    
     glutCreateWindow("Bias | Mirza");
     gluOrtho2D(-320.0,320.0,-320.,320.);
     glutDisplayFunc(renderScene);
     timer(20);
     glutMainLoop();
}


Tampilannya seperti dibawah ini :





1 komentar:

  1. Play Slots Casino Game For Real Money at JTG - MissouriHub
    The only place to play 시흥 출장샵 for real money with a real money casino is online slots. 통영 출장샵 From 오산 출장안마 the 청주 출장샵 comfort of your home, to the thrill 용인 출장샵 of spinning slots and

    BalasHapus