Sabtu, 02 Juli 2011

Keyboard dan Mouse

Ingat bagaimana saya katakan GLUT adalah sebuah framework berbasis peristiwa? Jika Anda ingin diberitahu apa pun (seperti tekan tombol) semua yang perlu Anda lakukan adalah memberitahu kekenyangan "memanggil fungsi saya ketika seseorang menekan kunci!".

Nama tidak penting tetapi Anda harus menyatakan dengan tanda tangan yang tepat:

kekosongan keyboard ( unsigned char key, int x, int y)

{

beralih (tombol) {

Kasus 27: / / 27 adalah kode untuk tombol ESC.
exit (0);
istirahat ;
}
}

Lalu sebelum memberikan kontrol untuk melakukan panggilan ini kekenyangan:

glutKeyboardFunc (keyboard)

Ketika pengguna menekan tombol fungsi akan dipanggil dan parameter "kunci" akan berisi kode ascii dari kunci. Ini bekerja dengan kunci yang normal yang menghasilkan hanya satu tetapi untuk memindai kode kunci khusus Anda membutuhkan fungsi yang berbeda:

kekosongan keyspecial ( int kunci, int x, int y)

kekosongan keyspecial ( int kunci, int x, int y)
{

jika (key == GLUT_KEY_PAGE_UP) / / Halaman up
{
/ / ...... melakukan apa yang pernah yang ingin Anda lakukan
glutPostRedisplay (); / / redraw semuanya untuk mencerminkan perubahan

} jika (tombol == GLUT_KEY_PAGE_DOWN) {


/ / ...... melakukan apa yang pernah ingin Anda lakukan
glutPostRedisplay (); / / redraw semuanya untuk mencerminkan perubahan
} jika (tombol == GLUT_KEY_HOME) {


/ / ...... melakukan apa yang pernah ingin Anda lakukan
glutPostRedisplay (); / / redraw semuanya untuk mencerminkan perubahan
} jika (tombol == GLUT_KEY_END) {


/ / ...... melakukan apa yang pernah ingin Anda lakukan
glutPostRedisplay (); / / redraw semuanya untuk mencerminkan perubahan
}

}

Hook it up dengan kekenyangan menggunakan:

glutSpecialFunc (keyspecial);

Handleing Mouse sama mudah. Untuk mouse Anda memiliki callback berikut:

glutMouseFunc (processMouse); / / satu ini adalah untuk menangkap klik mouse dan hanya disebut ketika klik telah terjadi

glutMotionFunc (processMouseActiveMotion); / / ini
glutPassiveMotionFunc (processMousePassiveMotion);
glutEntryFunc (processMouseEntry);

Contoh Program OpenGL

/ / Jika Anda tidak menggunakan Visual Studio untuk mengkompilasi ini kemudian hapus stdafx.h

# Include # include # include # include kekosonganinit ( batal ) {






glClearColor (0,0, 0,0, 0,0, 0,0);
glEnable (GL_DEPTH_TEST);
glShadeModel (GL_SMOOTH);

} batal display ( batal ) {



glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
/ * Memuat matriks Identitas berarti kita mereset layar sistem koordinat dengan sumbu XYZ panjang 1:
Layar dimulai pada z = 0, x =- 1 sampai x = 1 dan y =- 1 ke y = 1 * /
glLoadIdentity ();

glTranslatef (0,0.0 f,-6.0f);
glBegin (GL_TRIANGLES);
glColor3f (1.0f, 0.0f, 0.0f);
glVertex3f (0.0f, 1.0f, 0.0f);
glColor3f (0.0f, 1.0f, 0.0f); / / Set Color Untuk Hijau
glVertex3f (-1.0f, - 1.0f, 0.0f);
glColor3f (0.0f, 0.0f, 1.0f); / / Set Color Untuk Biru
glVertex3f (1.0f,-1.0f, 0.0f);
glEnd (); / / Selesai Menggambar A Segitiga

Tidur (5);
glutSwapBuffers ();


}

kekosongan membentuk kembali ( int w, int h)
{
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
gluPerspective (60,0, (GLfloat) w / (GLfloat) h, 1,0, 20,0);
glMatrixMode (GL_MODELVIEW);

} kekosongan keyboard ( unsigned char key, int x, int y) {



beralih (tombol) {
Kasus 27:
exit (0);
istirahat ;
}

}



kekosongan keyspecial ( int kunci, int x, int y)
{

jika (key == GLUT_KEY_PAGE_UP) / / Halaman up
{
/ / ...... melakukan apa yang pernah ingin Anda lakukan
glutPostRedisplay (); / / redraw semuanya untuk mencerminkan perubahan

} jika (tombol == GLUT_KEY_PAGE_DOWN) {


/ / ...... melakukan apa yang pernah ingin Anda lakukan
glutPostRedisplay (); / / redraw semuanya untuk mencerminkan perubahan
} jika (tombol == GLUT_KEY_HOME) {


/ / ...... melakukan apa yang pernah ingin Anda lakukan
glutPostRedisplay (); / / redraw semuanya untuk mencerminkan perubahan
} jika (tombol == GLUT_KEY_END) {


/ / ...... melakukan apa yang pernah ingin Anda lakukan
glutPostRedisplay (); / / redraw semuanya untuk mencerminkan perubahan
}

}

int main ( int argc, arang ** argv)
{

glutInit (& argc, argv);
glutInitDisplayMode (GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
glutInitWindowSize (500, 500);
glutInitWindowPosition (100, 100);
glutCreateWindow (argv [0]);
init ();
glutDisplayFunc (tampilan);
glutReshapeFunc (membentuk kembali );
glutKeyboardFunc (keyboard); / / memberitahu kekenyangan untuk memanggil fungsi ini ketika pengguna menekan tombol
glutSpecialFunc (keyspecial); / / memberitahu kekenyangan untuk memanggil fungsi ini ketika pengguna menekan tombol khusus
glutMainLoop ();
return 0;

}

0 komentar:

Related Posts Plugin for WordPress, Blogger...

Berita Populer