3
Môn: Đồ ha máy tính Lp 06CK1/06CK2 GVHDTH: 1 Lê ThHoàng Ngân, Quách KhGia Bài hướng dn thc hành tun 2 Xlý skin vi GLUT Bài này hướng dn cách tiếp nhn, xlý và phn hi các skin tbàn phím, chut và cách to bđịnh thi gian. Bước 1: Viết hàm xlý skin 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 nhn o x, y: tọa độ con trchuột lúc phím được nhn Chut 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/phi/gia chut o state: trng thái ca nút chut (nhn xung hay thra) o x, y: tọa độ con trchut

HDTH2

Embed Size (px)

DESCRIPTION

đồ họa máy tính

Citation preview

Page 1: HDTH2

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

Page 2: HDTH2

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

Page 3: HDTH2

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.