Tutorial Melayu

OpenGL: Berinteraksi dengan papan kekunci (keyboard)

Introduction

user

Fairuz

System Engineer (Texas Instruments France), Masters in Electronics , Embedded System Engineering,


LATEST POSTS

Nota: git alias yang biasa digunakan 05th December, 2013

Nota: Android .gitignore 23rd February, 2013

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

Fairuz

http://www.tutorialmelayu.com

System Engineer (Texas Instruments France), Masters in Electronics , Embedded System Engineering,

There are no comments.

Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

View Comments (0) ...
Navigation