Upload
my-hoang
View
13
Download
1
Embed Size (px)
DESCRIPTION
đồ họa máy tính
Citation preview
Môn: Đồ họa máy tính Lớp 06CK1/06CK2
GVHDTH: 1 Lê Thị Hoàng Ngân, Quách Khả Gia
Bài hướng dẫn thực hành tuần 2
Xử lý sự kiện với GLUT
Bài này hướng dẫn cách tiếp nhận, xử lý và phản hồi các sự kiện từ bàn phím, chuột và
cách tạo bộ định thời gian.
Bước 1: Viết hàm xử lý sự kiện
• Bàn phím
void XuLyBanPhim(unsigned char key, int x, int y) { // doan code xu ly } Ý nghĩa các tham số:
o key: mã ACSII của phím được nhấn
o x, y: tọa độ con trỏ chuột lúc phím được nhấn
• Chuột
void XuLyChuot(int button, int state, int x, int y) { // doan code xu ly } Ý nghĩa các tham số:
o button: nút trái/phải/giữa chuột
o state: trạng thái của nút chuột (nhấn xuống hay thả ra)
o x, y: tọa độ con trỏ chuột
Môn: Đồ họa máy tính Lớp 06CK1/06CK2
GVHDTH: 2 Lê Thị Hoàng Ngân, Quách Khả Gia
• Định thời gian
void XuLyThoiGian(int value) { // doan code xu ly // goi lai ham glutTimerFunc neu muon tiep tuc goi lai ham xu ly
nua glutTimerFunc(khoangTG, XuLyThoiGian, 0); }
Bước 2: Đăng kí sự kiện
• Bàn phím
Sử dụng hàm glutKeyboardFunc để đăng kí.
void glutKeyboardFunc(void (*func)(unsigned char key, int x, int y));
Tham số truyền vào là tên hàm xử lý sự kiện tương ứng.
• Chuột
Sử dụng hàm glutMouseFunc để đăng kí.
void glutMouseFunc(void (*func)(int button, int state, int x, int y));
Tham số truyền vào là tên hàm xử lý sự kiện tương ứng.
• Định thời gian
Sử dụng hàm glutTimerFunc để đăng kí.
void glutTimerFunc(unsigned int msecs, void (*func)(int value), int value));
Tham số truyền vào gồm:
o msecs: Khoảng thời gian chờ trước khi gọi hàm xử lý sự kiện (tính bằng mili giây)
o Tên hàm xử lý sự kiện tương ứng.
o value: Giá trị sẽ truyền vào hàm xử lý sự kiện
Môn: Đồ họa máy tính Lớp 06CK1/06CK2
GVHDTH: 3 Lê Thị Hoàng Ngân, Quách Khả Gia
Sau khi đã đăng kí sự kiện, mỗi lần có một sự kiện được phát sinh (nhấn bàn phím
hoặc chuột, hết khoảng thời gian chờ) thì hàm xử lý sự kiện tương ứng sẽ được gọi.
Riêng đối với bộ định thời gian, sự kiện chỉ được phát sinh duy nhất một lần, nếu muốn
lặp lại nữa (cứ sau X giây thì thực hiện một công việc nào đó) thì trong hàm xử lý sự kiện
ta phải gọi hàm glutTimerFunc để đăng kí lại.
Bước 3: Hủy đăng kí sự kiện
Truyền vào các hàm đăng kí sự kiện glutKeyboardFunc, glutMouseFunc tham số NULL để
hủy đăng kí theo dõi sự kiện tương ứng.
Bài tập:
1. Từ mã nguồn trong bài hướng dẫn tuần 1, đăng kí theo dõi sự kiện bàn phím. Mỗi lần nhấn phím ‘C’ hoặc ‘c’, màu sắc hình vuông thay đổi. Nếu nhấn ESC chương trình thoát.
2. Đăng kí theo dõi sự kiện chuột. Mỗi lần click chuột trái màu sắc hình vuông sẽ thay đổi. 3. Sửa lại ví dụ minh họa 3, thay glutIdleFunc bằng glutTimerFunc làm cho tam giác quay
với tốc độ 3-4 giây/vòng.
Bài tập Mở rộng: 1. Nhấn phím ‘V’ hoặc ‘v’ vẽ ra hình vuông, nhấn phím ‘T’ hoặc ‘t’ vẽ ra hình ngũ giác đều. 2. Sử dụng chuột để vẽ ra một đường thẳng (chấm hai điểm hoặc nhấn giữ rồi thả). 3. Thực hiện xử lý để có thể dừng tam giác đang quay bằng cách nhấn phím ‘S’ hoặc ‘s’.
Xem thêm trong tập tin đặc tả thư viện GLUT glut-3.spec.pdf mục Callback Registration để biết thêm chi tiết về các hàm đã mô tả trong phần hướng dẫn.