Interaksi Mouse pada OpenGL

Jumat, Desember 09, 2011 | 0 Comments

Selain ada interaksi keyboard, open GL juga menyediakan fungsi untuk menambahkan interaksi menggunakan mouse. Inisialisasi penggunaan fungsi mouse yaitu:


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);
}


GLUT_LEFT_BUTTON untuk inisialisasi button mouse kiri.
GLUT_RIGHT_BUTTON untuk inisialisasi button mouse kanan.
GLUT_MIDDLE_BUTTON untuk inisialisasi button mouse tengah.
Fungsi dari GLUT_DOWN adalah untuk inisialisasi ketika tombol mouse ditekan.
Fungsi dari GLUT_UP adalah untuk inisialisasi ketika tombol mouse dilepaskan.

Berikut program yang menggunakan fungsi mouse. Gambarlah sebuah objek persegi, objek tersebut akan berpindah tempat jika kita klik mouse di area windows openGL.



Screenshot program
kondisi awal

Setelah mouse di klik di posisi yang berbeda

Berikut source code program

#include "stdlib.h"
#include "stdio.h"
#include "gl/glut.h"

int x=0,y=0,z=0;
int w=480, h=480;

void drawQuad() {
      glBegin(GL_POLYGON);
      glColor3f(0,0,1);
            glVertex2f(-20.,-20.);
            glVertex2f(20.,-20.);
            glVertex2f(20.,20.);  
            glVertex2f(-20.,20.);
      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;
            printf("   x = %d    y = %d",x,y);
      }
}

void renderScene(void){
      glClear(GL_COLOR_BUFFER_BIT);
      glClearColor(1,1,1,1);
      glPushMatrix();
      glTranslatef(x,y,z);
      drawQuad();
      glPopMatrix();
      glFlush();
}

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

void main (int argc, char **argv){
      glutInit(&argc, argv);
      glutInitWindowPosition(100,100);
      glutInitWindowSize(w,h);
      glutCreateWindow("Interaksi Mouse");
      gluOrtho2D(-w/2,w/2,-h/2,h/2);
      glutDisplayFunc(renderScene);
      glutMouseFunc(mouse);
      glutTimerFunc(1,timer,0);
      glutMainLoop();
}

Selamat mencobaaaaaaaaaaa..!! Baca Selengkapnya...

Tidak ada komentar:

Let's havE fUn gUys!!