Pages

Wednesday, May 1, 2013

Membuat 2 Objek Bergerak dengan Memanfaatkan Interaksi Keyboard


Fungsi dasar pembuatan animasi dengan menggunakan KeyboardFunction adalah sebagai berikut 
GLUTAPI void APIENTRY glutKeyboardFunc(void (GLUTCALLBACK *func)(unsigned char key, int x, int y));

Dalam penggunaan glutKeyboardFunc dimungkinkan untuk mendeteksi input dari keyboard. Fungsi ini diletakkan pada fungsi main dari program, dan parameternya adalah callback function yang telah didefinisikan berupa fungsi dengan 3 parameter, seperti contoh di bawah ini.

void myKeyboard(unsigned char key, int x, int y){
          if(key == 'a') glTranslatef(4,0,0); //seleksi tombol yang ditekan
}

void mySpecialKeyboard(int key, int x, int y){
          switch(key){
                 case GLUT_KEY_??? : …; break;
          } 
} 

Langsung saja kita membuat 2 Objek Bergerak dengan Memanfaatkan Interaksi Keyboard

berikut Script programnya

#include<stdlib.h>
#include<glut.h>

float a = 0;
float b = 0;
float c = 0;
float d = 0;

void drawQuad(){     //segi4
   glBegin(GL_QUADS);
   glColor3f(1,0,0);
         glVertex2i(0.,0.);
         glVertex2i(100.,0.);
         glVertex2i(100.,100.);
         glVertex2i(0.,100.);
   glEnd();
   glFlush();
}
void draw() //segitiga
{
   glBegin(GL_TRIANGLES);
   glColor3f(0,1,1);
   glVertex2i(0,0);
   glVertex2i(-50,-100);
   glVertex2i(50,-100);
   glEnd();
}

void renderScene()
{
   glClear(GL_COLOR_BUFFER_BIT);
   glPushMatrix();
         glTranslatef(c,d,0);
         drawQuad();
         glPopMatrix();

         glPushMatrix();
         glTranslatef(a,b,0);
         draw();
         glPopMatrix();
         glFlush();
}
void myKeyboard(unsigned char key, int x, int y) {
   if (key == 'a') c-=4 ;
   else if (key == 'd') c+=4;
   else if (key == 'w') d+=4;
   else if (key == 'x') d-=4;
}
void mySpecialKeyboard(int key,int x, int y){
   switch(key){
         case GLUT_KEY_LEFT:
               a-=4;
               break;
         case GLUT_KEY_RIGHT:
               a+=4;
               break;
         case GLUT_KEY_UP:
               b+=4;
               break;
         case GLUT_KEY_DOWN:
               b-=4;
               break;
   }
}

void update(int value){
   glutPostRedisplay();
   glutTimerFunc(50,update,0);
}

void main(int argc, char **argv){
   glutInit(&argc, argv);
   glutInitWindowPosition(100, 100);
   glutInitWindowSize(640, 480);
   glutCreateWindow("Interaksi Keyboard");
   gluOrtho2D(-320.0,320.0,-320.0,320.0);
   glutDisplayFunc(renderScene);
   glutKeyboardFunc(myKeyboard);
   glutSpecialFunc(mySpecialKeyboard);
   glutTimerFunc(1000, update, 0);
   glutMainLoop();
}


Selamat Mencoba .... ^_^


0 komentar:

Post a Comment

Statistic

Buscar