OpenGL – C++ Bài 10: Xử lý sự kiện bấm chuột và move chuột

 

Hi 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 123AZ

Bài hôm nay chúng ta sẽ cùng đi tìm hiểu về kỹ thuật nhận sự kiện khi click chuột trong opengl

Đây là một trong số những kỹ thuật rất cơ bản và phổ biến trong lập trình đồ họa.

I. Lý thuyết cơ bản.
1. Bắt sự kiện bấm chuột trái, chuột phải và chuột giữa.

 Step1: Viết một hàm MouseButton như sau:

+ type_button : Là kiểu phím bấm chuột, đó thể hiện là chuột trái hay chuột phải

+ state: là trạng thái bấm xuông hay nhả ra.

+ x,y là tọa độ hiện tại của chuột trên màn hình windows.

Chúng ta có 3 loại cho type_button được định nghĩa trong glut.h như sau

#define GLUT_LEFT_BUTTON 0
#define GLUT_MIDDLE_BUTTON 1
#define GLUT_RIGHT_BUTTON 2

Từ đó chúng ta hoàn toàn có thể dễ dàng bắt được button nào của chuột được sử dụng.

+ Step 2: Gọi hàm MouseButton trong hàm main thông qua hàm xử lý chuột như sau:

glutMouseFunc(MouseButton);

2. Bắt sự kiện khi thực hiện move chuột.

Step 1: Viết một hàm MouseMove như sau:

+ x,y là tọa độ của chuột liên tục cập nhật khi chuột đang được move.

Step2: Trong hàm Main gọi hàm MouseMove như sau:

glutMotionFunc(mouseMove);

Note: Hàm MouseMove là hàm chạy gần như liên tục khi chúng ta di chuột liên tục.

Ok. Các bạn có thể thử và đặt debug vào để kiểm tra.

II. Thực hành.

Có thể nhiều bạn sẽ thắc mắc rằng, Vậy với mouse chúng ta sử dụng mouse để làm gì trong lập trình đồ họa.

Mouse sử dụng rất phổ biến và không thể thiếu.

Với Game: Mouse sử dụng để định dạng phương hướng nhìn của model chủ vào các model khác, hoặc nhận nhiệm vụ là bắn đạn, tấn công của các nhân vật game….

Với phần mềm đồ họa: Mouse sử dụng để select đối tượng, kéo đối tượng, hoặc xoay cameral để nhìn đối tượng theo nhiều hướng.

Và nó sử dụng theo bất cứ mục đích nào bạn mong muốn.

Ok, Và bây giờ chúng ta sẽ thực hành việc sử dụng kỹ thuật bắt sự kiện mouse để thực hay quay cameral vòng quanh vật.

+ Yêu cầu:

– Chỉ khi bấm chuột trái (phải) thì cameral mới có thể quay quanh vât.

– Nếu nhả chuột thì ko thể quay cameral quanh vật.

– Khi kéo chuột move từ vị trí A sang vị trí B theo tọa độ màn hình windows, thì cameral trong opengl sẽ quay đi một góc anpha theo trục Y.

Hãy cùng xem hình mình họa

Chúng ta cần tính được z’ và x’ mỗi khi kéo chuột từ A đến B

Full Code:

 

 

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *

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