OpenGL – C++ Bài 11: Xử lý sự kiện bàn phím

 

Chào mừng các bạn đến với  chủ đề Học Lập Trình OpenGL Tại blog: Phát triển phần mềm 123-az

Trong bài số 10, tôi đã giới thiệu đến các bạn cách bắt sự kiện khi click chuột và move chuột.

Và chúng ta đã thực hành được một demo kết hợp giữa việc click chuột và move chuột để quay camera xung quanh vật.

Và điều này giúp chúng ta có thể nhìn được vật theo nhiều hướng.

Trong bài này tôi sẽ hướng dẫn các bạn bắt sự kiện khi bấm một phím trên bàn phím.

I. Lý thuyết cơ bản.
1. Bắt sự kiện của các phím chức năng như Left Right Up Down, F1-F12…

+ Viết một hàm OnSpecialKeyDown như sau:

+ Trong hàm Main chúng gọi hàm OnSpecialKeyDown như sau:

glutSpecialFunc(OnSpecialKeyDown);

Hàm OnSpecialKeyDown ở trên chỉ có thể nhận được một số phim trên keyboard như sau:

+ 12 phim F đi từ F1-F12

+ 4 Phim : Up Down Left Right

+ Phim: Insert/End/Page Down-Up/ Home

2. Bắt sự kiện của các ký tự A B C…

+ Viết một hàm OnKeyDown như sau:

Trong hàm main chúng ta gọi hàm OnKeyDown như sau:

glutKeyboardFunc(OnKeyDown);

Ngoài ra các bạn có thể thêm sự kiện cho 2 hai hàm nhả phím bấm như sau:

glutSpecialUpFunc(releaseKey);

glutKeyboardUpFunc(OnKeyUp);

Hãy cùng xem video thực hành tôi sẽ nói rõ hơn.

 

II. Thực hành OpenGL Bắt sự kiện bàn phím.

Chúng ta cùng thực hành bài toán với các yêu cầu sau.

+ Click vào phím up và down thì cameraltiến lại gần hoặc lùi dần ra xa.

+ Khi click vào phím right và left thì.

+ Có thể dịch camera sang bên trái hoặc bên phải.

+ Có thể camera đứng im, nhưng nó tự quay quanh mình nó 1 góc anpha.

Note: camera quay quanh mình nó khác với camera quanh xung quanh vật.

=> CAM quay quanh mình nó thì nó sẽ nhìn được mọi hướng, sẽ có lúc nó ko nhìn vào vật mà nhìn sang vật khác.

=> CAM quanh vật (như bài số 10, bắt sự kiện Mouse) thì CAM luôn nhìn thấy vật và nhìn ở các góc cạnh, các hướng khác nhau.

Full code:

 

 

 

 

 

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.