OpenGL
OpenGL: Berinteraksi dengan papan kekunci (keyboard)
Posted on .Sepertimana callback papar dan reshape dalam artikel terdahulu, untuk melakukan interaksi menggunakan papan kekunci, kita akan menggunakan callback. Kali ini kita akan menggunakan dua callback berbeza: key press (apabila kekunci ditekan) dan key up (apabila kekunci dilepaskan).
Tekan Kekunci (key press)
Seperti mana sebelum ini, kita akan membina satu fungsi yang kita namakan tekanKekunci.
void tekanKekunci(unsigned char key, int x, int y) {
}
Kemudian di dalam fungsi main, kita akan daftarkan fungsi ini.
glutKeyboardFunc(tekanKekunci);
Jadi di dalam fungsi tekanKekunci, kita boleh menggunakan switch case terhadap pemboleh ubah key dan melakukan perubahan sewajarnya terhadap grafik 3D yang akan dipaparkan.
if (key == 'a') {
}
Lepas Kekunci (key up)
Untuk lepas kekunci atau keyup, kita akan buat sama seperti tekan kekunci.
void lepasKekunci(unsigned char key, int x, int y) {
}
Kemudian di dalam fungsi main, kita akan daftarkan fungsi ini.
glutKeyboardUpFunc(lepasKekunci);
if (key == 'a') {
}
Jika kita lihat contoh di bawah, saya biarkan tekanKekunci dan lepasKekunci kosong buat masa ini kerana kita hanya akan perlukan fungsi-fungsi ini dalam beberapa artikel akan datang.
main.cpp
#include
#include
void tekanKekunci(unsigned char key, int x, int y) {
switch (key) {
case 27: // Keluar dari program
exit(0) ;
break ;
default:
break ;
}
}
void lepasKekunci(unsigned char key, int x, int y) {
}
void papar(void){
glClearColor(1.0f, 0.0f, 0.0f, 1.0f); // Tukar background kepada warna merah
glClear(GL_COLOR_BUFFER_BIT); // Kosongkan buffer warna
glLoadIdentity(); //
glFlush(); // Hantar buffer ke tetingkap
}
void reshape (int width, int height) {
glViewport(0, 0, (GLsizei)width, (GLsizei)height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60, (GLfloat)width / (GLfloat)height, 1.0, 100.0);
glMatrixMode(GL_MODELVIEW);
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE);
glutInitWindowSize (500, 500);
glutInitWindowPosition (100, 100);
glutCreateWindow ("Tetingkap pertama saya");
glutDisplayFunc(papar);
glutReshapeFunc(reshape);
glutKeyboardFunc(tekanKekunci);
glutKeyboardUpFunc(lepasKekunci);
glutMainLoop();
return 0;
}
Fairuz
http://www.tutorialmelayu.comSystem Engineer (Texas Instruments France), Masters in Electronics , Embedded System Engineering,
There are no comments.