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