Tuesday, April 30, 2013

Interaksi Mouse


GLUT pada dasarnya dibangun untuk menciptakan aplikasi grafis menggunakan pemrograman yang bersifat procedural. Glut hanya akan merespon jika ada event (kejadian). Salah satu event tersebut ialah interaksi dengan keyboard.  Selain itu openGL juga menyediakan fungsi untuk menambahkan interaksi dengan mouse.
  • Fungsi dasar pembuatan interaksi dengan menggunakan MouseFunction

GLUTAPI void APIENTRY glutMouseFunc(void (GLUTCALLBACK *func)(int button, int state, int x, int y));
Paramater func adalah fungsi yang akan ditangani dengan event klik mouse.
GLUTAPI void APIENTRY glutMotionFunc(void *func(int x, int y));
Fungsi di atas adalah fungsi pelengkap dari fungsi interaksi mouse untuk mendeteksi gerakan mouse.


  • Inisialisasi dalam penggunaan MouseFunction

void mouse(int button, int state, int x,int y){
            if(button==GLUT_LEFT_BUTTON && state==GLUT_DOWN)
                  drawDot(x,480-y);
            if(button==GLUT_RIGHT_BUTTON && state==GLUT_DOWN)
                  drawDot2(x,480-y);
            if(button==GLUT_MIDDLE_BUTTON && state==GLUT_DOWN)
                  drawDot3(x,480-y);
}

void motion(int x,int y){
           
}
Keterangan :
a.       GLUT_LEFT_BUTTON untuk inisialisasi button mouse kiri.
b.      GLUT_RIGHT_BUTTON untuk inisialisasi button mouse kanan.
c.       GLUT_MIDDLE_BUTTON untuk inisialisasi button mouse tengah.
d.      GLUT_DOWN adalah untuk inisialisasi ketika tombol mouse ditekan.
e.       GLUT_UP adalah untuk inisialisasi ketika tombol mouse dilepaskan.
                                                   
Kemudian pada main program perlu menambahkan fungsi untuk callback fungsi MouseFunction.
glutMouseFunc(mouse);
glutMotionFunc(motion);
contoh program interaksi dengan mouse:
void drawQuad() {
      glBegin(GL_TRIANGLES);
            glVertex2f(-50.,-50.);
            glVertex2f(50.,-50.);
            glVertex2f(0,0); 
      glEnd();
}

void mouse(int button, int state, int xmouse, int ymouse){
      if(button==GLUT_LEFT_BUTTON && state==GLUT_DOWN){

            x = xmouse-(w/2);
            y = (h/2)-ymouse;
                     f=0,ff=0,fff=1;
      }
         if(button==GLUT_MIDDLE_BUTTON && state==GLUT_DOWN ){
                     a=1.1;
                     b=1.1;
                     f=1,ff=0,fff=0;
         }
         if(button==GLUT_RIGHT_BUTTON && state==GLUT_DOWN ){
                     a=0.9;
                     b=0.9;
                     f=0,ff=1,fff=0;
         }
}
void renderScene(void){
      glClear(GL_COLOR_BUFFER_BIT);
      glPushMatrix();
         glColor3f(f,ff,fff);
      glTranslatef(x,y,z);
         glScalef(a,b,0);
      drawQuad();
      glPopMatrix();
      glFlush();
}

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


hasil :





Load disqus comments

0 comments