Cómo hacer selección / selección 3D usando OpenGL

Tengo algunos objetos en la escena, algunos pueden ocluir otros. Cuando hago clic con el mouse o arrastrar y seleccionar para obtener un rectángulo de selección, quiero seleccionar / elegir solo los objetos que puedo ver desde esta perspectiva. La aplicación actualmente usa el modo de render GL_SELECT pero, como sabemos, también selecciona objetos ocluidos. Además, leí que esto está en desuso en OpenGL 3.

Hay dos métodos que actualmente me atraen. Primero es la selección de objetos usando el búfer posterior (libro rojo, capítulo 14): establecer el color de cada objeto en su ID de objeto y leer el color de los píxeles del búfer del marco posterior. El segundo es consultas de oclusión (excelente, 4ª ed., Cap. 13).

Otros enfoques que he descartado son mirar los valores min / max z en el búfer de selección y hacer una detección personalizada de rayos / objetos fuera de GL.

Tengo algunas preguntas: 1) Si GL_SELECT está en desuso en OpenGL reciente, ¿qué alternativas se supone que los desarrolladores deben usar? 2) Solo he leído sobre consultas de oclusión que se utilizan para acelerar el renderizado. ¿Se pueden usar para la selección / selección, y hay inconvenientes? 3) La aplicación existente tiene un puñado de llamadas glColorXXX. Si tomé la ruta del búfer de retroceso y usé glColorMask (FALSE, FALSE, FALSE, FALSE), esto convertirá efectivamente las llamadas de glColourXXX en llamadas que no tienen efecto, lo que me permite controlar el color en un solo lugar cuando renderizo en modo select ? 4) ¿Qué ruta es mejor / canónica?

Respuestas a la pregunta(1)

Su respuesta a la pregunta