Tôi muốn sử dụng con lăn chuột trong chương trình OpenGL GLUT của tôi để phóng to và thu nhỏ một cảnh? Làm thế nào để làm điều đó?Sử dụng con lăn chuột trong GLUT
Trả lời
Lưu ý rằng thư viện đáng kính Nate Robin's GLUT không hỗ trợ bánh cuộn. Nhưng, sau đó triển khai của GLUT như FreeGLUT làm.
Sử dụng bánh xe cuộn trong FreeGLUT thật đơn giản. Dưới đây là cách thực hiện:
Khai báo chức năng gọi lại sẽ được gọi bất cứ khi nào cuộn cuộn được cuộn. Đây là nguyên mẫu:
void mouseWheel(int, int, int, int);
Đăng ký callback với (miễn phí) chức năng thị trường bất động glutMouseWheelFunc().
glutMouseWheelFunc(mouseWheel);
Xác định chức năng gọi lại. Tham số thứ hai cho biết hướng cuộn. Giá trị của +1 là tiến, -1 là lạc hậu.
void mouseWheel(int button, int dir, int x, int y)
{
if (dir > 0)
{
// Zoom in
}
else
{
// Zoom out
}
return;
}
Vậy đó!
glutMouseWheelFunc callback Freeglut là phụ thuộc phiên bản và không đáng tin cậy trong X. Sử dụng chức năng chuột tiêu chuẩn và thử nghiệm cho các nút 3 và 4.
Các thuyết minh OpenGlut vào trạng thái glutMouseWheelFunc:
Do thiếu thông tin về chuột, không thể triển khai đúng cách này trên X vào lúc này. Sử dụng chức năng này giới hạn tính di động của ứng dụng của bạn. (Tính năng này hoạt động trên X, chỉ không đáng tin cậy.) Bạn được khuyến khích sử dụng tiêu chuẩn, báo cáo nút chuột đáng tin cậy, chứ không phải là sự kiện bánh xe.
Sử dụng báo cáo thị trường bất động chuột tiêu chuẩn:
#include <GL/glut.h>
<snip...>
void mouse(int button, int state, int x, int y)
{
// Wheel reports as button 3(scroll up) and button 4(scroll down)
if ((button == 3) || (button == 4)) // It's a wheel event
{
// Each wheel event reports like a button click, GLUT_DOWN then GLUT_UP
if (state == GLUT_UP) return; // Disregard redundant GLUT_UP events
printf("Scroll %s At %d %d\n", (button == 3) ? "Up" : "Down", x, y);
}else{ // normal button event
printf("Button %s At %d %d\n", (state == GLUT_DOWN) ? "Down" : "Up", x, y);
}
}
<snip...>
glutMouseFunc(mouse);
Như OP đã nói, đó là "chết đơn giản". Anh ta đã sai.
Thật không may bằng cách sử dụng các nút cố định là khá không đáng tin cậy vì các nút chuột tương ứng với bánh xe chuột phụ thuộc vào thiết bị bạn đã cắm vào./5 cho lên/xuống, không phải 3/4. Đối với bất kỳ chương trình có thể sử dụng nào, bạn muốn giúp người dùng dễ dàng sửa đổi điều này. –
Trên máy Mac của tôi với rãnh tự do, 3/4 tương ứng với cuộn lên và xuống dọc và 5/6 tương ứng với cuộn ngang (trên bàn di chuột của tôi). –
Cảm ơn bạn đời, giải pháp này hoạt động hoàn hảo trong kịch bản thử nghiệm của tôi. –
- 1. jquery con lăn chuột dừng tuyên truyền
- 2. Làm cách nào để chế độ xem của tôi phản hồi với con lăn chuột?
- 3. Làm cách nào để cuộn bảng của tôi bằng con lăn chuột?
- 4. Làm cách nào để ngăn chặn di chuyển con lăn chuột cửa sổ ...?
- 5. jQuery cụ cuộn bằng con lăn chuột - di chuyển ONE vị trí và ngăn chặn
- 6. Sử dụng phông chữ bitmap GLUT
- 7. Phát hiện con lăn chuột trên trục x (trái và phải) với Javascript
- 8. Làm thế nào để sử dụng bàn di chuột của tôi để cuộn con lăn ngang trong một thanh cuộn Java AWT
- 9. Đọc pixel từ Ứng dụng OpenGL/GLUT
- 10. Làm cách nào để tôi có thể tạo trình cuộn lùi Windows 8 Metro phản ứng với con lăn chuột?
- 11. Ẩn con trỏ chuột khi không sử dụng JavaScript
- 12. Sử dụng GLUT với Visual C++ Express Edition
- 13. Bắt chước/giả mạo một con chuột Bấm và Chuột bằng cách sử dụng Qt
- 14. Làm thế nào để bạn sử dụng con trỏ chuột tùy chỉnh trong ứng dụng .NET?
- 15. Hỗ trợ con trỏ chuột động trong ứng dụng web?
- 16. lăn tối thiểu và lăn tối đa để tăng C++?
- 17. linux: chuột kép - nhiều con chuột có nhiều con trỏ chuột?
- 18. Lăn trở lại trong Git
- 19. Con trỏ chuột CSS ... xoay con trỏ?
- 20. áp dụng phương tiện lăn theo nhóm trong R
- 21. GLUT có chết không?
- 22. cách tạo các đường con trỏ theo con chuột trong biểu đồ bằng cách sử dụng C#
- 23. sử dụng chuột với sendInput trong C
- 24. Di chuyển con trỏ chuột trong JavaScript
- 25. Lăn một sự tiến hóa trở lại
- 26. Các hàng lăn trong bảng SQL
- 27. Văn bản đơn giản trong OpenGL (không có GLUT)
- 28. catalina.out lăn với Tomcat 6.0
- 29. Trình duyệt web: Ẩn con trỏ chuột
- 30. Khởi tạo OpenGL mà không cần GLUT
Nhiều phiền toái của tôi, freeGLUT dường như không thực hiện lệnh gọi glutMouseWheelFunc(). Thay vào đó mỉa mai rằng áp phích đã phàn nàn về phong cách đăng bài này, nhưng câu trả lời bạn đăng cho chính mình là không chính xác. – Rich
Thêm vào đó - ngay cả khi người ta sử dụng '#include' để mã biên dịch, glutMouseWheelFunc dường như không được gọi (như được thử nghiệm trên Ubuntu 10.04 x86_64, mà tàu freeglut 2.6.0). Giải pháp là sử dụng lệnh gọi lại 'glutMouseFunc' thông thường và kiểm tra nút' = = 3 3' để bật bánh xe, và 'nút == 4' để tắt bánh xe. –
glutMouseWheelFunc callback là cửa sổ cụ thể có thể không có trong hệ thống Linux và MAC – AMCoded