Tôi đang cố gắng tạo một ứng dụng trong Qt-openGL. Ở đây, tôi phải biết đối tượng đã nhấp, dựa trên nhấp chuột. Ý tưởng của tôi là lưu trữ các điểm (khu vực của đối tượng trong QWidget), và phù hợp với cú click chuột chống lại những điểm này. Ai có thể nói làm thế nào để làm điều này ?, hoặc có thể bất kỳ cơ thể hiển thị bất kỳ cách nào khác?Qt OpenGL- Cách nhận đối tượng dựa trên click chuột
Trả lời
Sự cố này thường được gọi là "chọn". Bản thân OpenGL chỉ vẽ mọi thứ, không có quản lý đối tượng hình học để nói về (OpenGL có các đối tượng, nhưng chúng là, những gì bạn thường gọi là tài nguyên).
Cách thông thường để triển khai OpenGL chọn những ngày này là lấy giá trị độ sâu tại vị trí nhấp chuột (glReadPixels(x, y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth)
) và không đưa nó vào không gian thế giới (gluUnProject(...)
). Điều này cung cấp cho bạn số (x,y,z)
của điểm được nhấp.
Vì bạn thường quản lý hình học của mình trong một số cấu trúc phân đoạn không gian (BSP, Kd, v.v.) bằng cách duyệt qua cấu trúc phân mục đến tọa độ nhấp, bạn có thể truy xuất đối tượng theo cách đó.
Phương pháp khác là chiếu tia theo sau lần nhấp vào cảnh và thực hiện kiểm tra giao cắt khối lượng/giới hạn.
Tôi mạnh mẽ không khuyến khích sử dụng cơ chế lựa chọn OpenGL cũ: Nó chậm và cồng kềnh để sử dụng.
- 1. OpenGL: chiếu click chuột vào hình học
- 2. Phông chữ dựa trên Vector trên OpenGL
- 3. Nhấp chuột xuống để kéo các đối tượng trên Mac
- 4. Cách ghi lại mã nguồn dựa trên Qt
- 5. JQuery hiển thị và ẩn div trên click chuột (animate)
- 6. Cài đặt OpenGL cho Qt
- 7. Nhận django id đối tượng dựa trên mô hình thuộc tính
- 8. LINQ Phân biệt dựa trên tài sản của đối tượng
- 9. Chọn đối tượng dựa trên giá trị của biến trong đối tượng sử dụng JQ
- 10. OpenGL xử lý nhiều đối tượng
- 11. RAII wrapper cho các đối tượng OpenGL
- 12. Quản lý bộ nhớ Qt cho các đối tượng Qt
- 13. Tách mảng đối tượng thành mảng mới dựa trên năm của ngày của đối tượng
- 14. Trình kích hoạt WPF dựa trên loại đối tượng
- 15. Sắp xếp mảng dựa trên đối tượng thuộc tính - Javascript
- 16. Tạo một đối tượng dựa trên 2 người khác
- 17. đối tượng 3ds max để opengl
- 18. Qt đối tượng/lớp để Qt ui tập tin
- 19. Qt Cách Tìm đối tượng trên một widget bằng cách sử dụng vị trí x() và y()
- 20. Phân loại một danh sách mảng các đối tượng dựa trên một biến trong đối tượng
- 21. Làm thế nào để sử dụng các chức năng OpenGL trên một widget OpenGL QT?
- 22. PrimeFaces DataTable CellEdit nhận đối tượng/đối tượng
- 23. 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
- 24. Giới hạn kích thước đối tượng OpenGL FrameBuffer tối đa?
- 25. Chuyển ứng dụng dựa trên Qt trong Android
- 26. Cập nhật Qt OpenGL Unusably Slow
- 27. Đối tượng theo con trỏ chuột
- 28. Sự kiện CLICK CLICK không kích hoạt (khi chuyển sang di chuột, nó không hoạt động)
- 29. Qt, kiểm tra đơn vị và đối tượng giả
- 30. Nhận đối tượng JQuery trống
Bây giờ các trình đổ bóng phổ biến, không dễ để đặt một id đối tượng cho từng đối tượng và sử dụng trình đổ bóng phân đoạn để viết cho một mặt phẳng ẩn chưa? Chọn sau đó sẽ trở thành đọc từ mặt phẳng đó tại tọa độ chuột. Không cần unprojection hoặc tìm kiếm hình học. –
@Ben Voigt: Miễn là bạn chỉ quan tâm đến một đối tượng dưới con trỏ chuột - tất nhiên điều này phù hợp với phương pháp không được chiếu - sau đó có. Tuy nhiên, nếu bạn quan tâm đến tất cả các đối tượng dưới con trỏ, thì bạn sẽ phải sử dụng phương pháp chọn tia, hoặc sử dụng một số lột sâu. Tuy nhiên, trong hầu hết các ứng dụng 3D nghiêm trọng, các đối tượng đang quản lý bằng cách sử dụng một số cấu trúc không gian nào đó, và việc kiểm tra này thường dễ dàng hơn. – datenwolf
tôi chọn bằng cách sử dụng gluUnProject & glReadPixels, nhưng kết quả luôn là đối tượng xa nhất thay vì đối tượng gần nhất, bất kỳ lý do gì? – jondinham