Tuesday, April 30, 2013

Interaksi Keyboard

Grafika komputer telah berhasil mengembangkan interkasi dengan sarana keyboard dan light-pen yang ditemukan oleh Ivan Sutherland dengan sistem penggambaran interaktif.
Input prmitif grafika dan pirantinya

Sebagaimana bnyak piranti dan cara untuk pemaparan output grafika komputer, demikian pula untuk piranti input yaitu
  • Keyboard(untuk memasukkan karakter atau stirng)
  • Grafik Tablets
  • Tombol
  • Joystick dan trackball
  • Mouse
  • Knobs
  • Space balls
  • Data gloves


Fungsi dasar pembuatan animasi dengan menggunakan keyboardFunction
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.
1.      Fungsi untuk karakter dan angka pada keyboard
void myKeyboard(unsigned char key, int x, int y){
if(key == 'char ataupun angka')
     //kode-kode y=untuk event yang akan di lakukan
}

Misal :                                                                               

void myKeyboard(unsigned char key, int x, int y){
if(key == ‘a’)
     glRotatef ( 90,0,1,0 );
      }
Agar fungsi tersebut dapat dideteksi secara berkala, maka pada fungsi main perlu ditambahkan fungsi : glutKeyboardFunc (myKeyboard);
2.   Fungsi untuk tombol special
      Tombol spesial meliputi : 
  • F1, F2,F3, F4,
  • tombol navigasi panah keatas, panah kebawah, panah kekiri, dan panah kekanan,
  • tombol page Down, page Up, Home, End, Insert
void mySpecialKeyboard(int key, int x, int y){
switch(key){
case GLUT_KEY_<opsional> :
…;// kode event yang akan dilakukan
break;
}
}


Misal :

void mySpecialKeyboard(int key, int x, int y){
switch(key){
case GLUT_KEY_LEFT> :
glRotatef (90, 1, 0, 0);
break;
}
      }
Agar fungsi tersebut dapat dideteksi secara berkala, maka pada fungsi main perlu ditambahkan fungsi : glutSpecialFunc (mySpecialKeyboard);

Contoh program :

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

void segitiga (){
      glBegin (GL_TRIANGLES);
      glColor3f (1,0,0);
      glVertex2f (0.,0.);
      glVertex2f (150,150);
      glVertex2f (-150,150);
      glColor3f (1,0,0);
      glVertex2f (0.,0.);
      glVertex2f (-150,-150);
      glVertex2f (150,-150);
      glEnd();
}

void myKeyboard(unsigned char key, int x, int y){
       if(key=='c') glRotatef (10,0,0,-4);
       else if(key='u') glRotatef (10,0,0,4);
}

void renderScene(){
      glClear(GL_COLOR_BUFFER_BIT);
      segitiga();
      glFlush();
}

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

void main(int argc, char **argv){
      glutInit(&argc, argv);
      glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
      glutInitWindowPosition(100,100);
      glutInitWindowSize(640,480);
      glutCreateWindow("latihan 6");
      gluOrtho2D(-320.,320.,-340.,340.);
      glutDisplayFunc(renderScene);
      glutKeyboardFunc(myKeyboard);
      glutTimerFunc(1,timer,0);
      glClearColor(1.,1.,1.,0); // untuk memberikan background putih
      glutMainLoop();
}

Hasil :




Load disqus comments

0 comments