Estoy tratando de hacer una aplicación en Qt-openGL. Aquí, tengo que conocer el objeto cliqueado, basado en el clic del mouse. Mi idea es almacenar los puntos (el área del objeto en QWidget) y hacer coincidir el clic del mouse con estos puntos. ¿Alguien puede decir cómo hacer esto ?, o ¿Puede un cuerpo mostrar de otra manera?Qt OpenGL- Cómo obtener el objeto basado en el clic del mouse
Respuesta
Este problema se conoce generalmente como "picking". OpenGL solo dibuja cosas, no hay administración de objetos geométricos para hablar (OpenGL tiene objetos, pero son, lo que normalmente llamarías recursos).
La forma habitual de implementar OpenGL picking en estos días es recuperar el valor de profundidad en la posición de clic (glReadPixels(x, y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth)
) y desprogramarlo en el espacio mundial (gluUnProject(...)
). Esto le da el (x,y,z)
del punto cliqueado.
Dado que generalmente administrará su geometría en alguna estructura de subdivisión espacial (BSP, Kd, etc.) atravesando la estructura de subdivisión hasta las coordenadas de clic, podrá recuperar el objeto de esa manera.
Otro método consiste en proyectar un rayo que sigue al clic en la escena y realizar pruebas de intersección de volúmenes de ray/bounding.
Desaconsejo encarecidamente el uso del viejo mecanismo de selección OpenGL: es lento y engorroso de usar.
- 1. Cómo detectar la tecla modificadora con el clic del mouse en Qt
- 2. Cómo detectar el estado del mouse en Qt sin MouseEvent
- 3. Google Map jQuery - obtener LatLng desde el clic del mouse
- 4. Cómo simular el clic del mouse con el control WebBrowser
- 5. Cómo simular el clic del mouse en C#?
- 6. Textarea pierde el foco en el clic del mouse?
- 7. ¿Cómo obtener el color del píxel? OpenGL
- 8. Qt ¿Cómo deshabilitar el desplazamiento del mouse de QComboBox?
- 9. Objeto siguiendo el cursor del mouse
- 10. Distinga entre hacer doble clic con el mouse y hacer clic con el mouse en wpf
- 11. ¿Cómo puedo obtener el componente en la posición de clic del mouse, cuando uso un TableCellEditor?
- 12. Obtener celda de cuadrícula con el mouse clic
- 13. Algoritmo para acercar el mouse (OpenGL)
- 14. obtener el cursor del mouse actual tipo
- 15. Obteniendo la ubicación del clic del mouse de una etiqueta en qt
- 16. Simular clic real del mouse
- 17. Haciendo clic en el mouse enviando mensajes
- 18. ¿Cómo obtener el control debajo del cursor del mouse?
- 19. qt QWidget clic
- 20. Obtener parcelas matplotlib para actualizar en el foco del mouse
- 21. D3js: cómo obtener coordenadas geográficas Lat/Log desde el clic del mouse?
- 22. Obtener posición del mouse
- 23. Liberando la captura del mouse y dejando que el clic del mouse pase
- 24. Deshabilitar el doble clic del mouse con javascript o jquery
- 25. ¿Cómo hacer que el cursor del mouse agarre el mouse?
- 26. Deshabilitar el clic del mouse cuando está fuera de div
- 27. win32: simular un clic sin simular el movimiento del mouse?
- 28. Cómo documentar el código fuente basado en Qt
- 29. Cómo borrar JTextField cuando el mouse hace clic en JTextField
- 30. Cómo obtener el valor booleano del objeto
Ahora que los sombreadores prevalecen, ¿no es fácil establecer una identificación de objeto para cada objeto y usar el sombreador de fragmentos para escribir eso en un plano oculto sin mezclar? La elección se convierte en lectura desde ese plano en las coordenadas del mouse. No hay necesidad de una proyección o una búsqueda de geometría. –
@Ben Voigt: Siempre que solo le interese un objeto debajo del puntero del mouse (por supuesto, esto coincide con el método de no proyección), entonces sí. Sin embargo, si le interesan todos los objetos debajo del puntero, tendrá que usar el método de selección de rayos o usar un poco de peeling en profundidad. Sin embargo, en las aplicaciones tridimensionales más serias, los objetos se administran usando alguna estructura espacial de todos modos, y tener una prueba en contra de esto suele ser más fácil. – datenwolf
hago picking usando gluUnProject y glReadPixels, pero el resultado es siempre el objeto más frágil en lugar del más cercano, ¿por qué? – jondinham