Como fazer a seleção / seleção 3D usando o OpenGL

Tenho alguns objetos em cena, alguns podem obstruir outros. Quando clico no mouse ou arrasto e seleciono para obter um retângulo de seleção, desejo selecionar / escolher apenas os objetos que posso ver dessa perspectiva. Atualmente, o aplicativo usa o modo de renderização GL_SELECT, mas como sabemos, isso também seleciona objetos ocluídos. Além disso, li que isso foi preterido no OpenGL 3.

Existem dois métodos que atualmente me atraem. O primeiro é a seleção de objetos usando o buffer traseiro (livro vermelho, capítulo 14): definindo a cor de cada objeto como seu ID e lendo a cor dos pixels do buffer do quadro traseiro. A segunda são as consultas de oclusão (soberba, 4ª ed, cap 13

Outras abordagens que excluí estão analisando os valores min / max z no buffer de seleção e fazendo a detecção personalizada de raios / objetos fora da G

Tenho algumas perguntas: 1) Se o GL_SELECT for descontinuado no OpenGL recente, que alternativas os desenvolvedores devem usar? 2) Eu só li sobre consultas de oclusão sendo usadas para acelerar a renderização. Eles podem ser usados para seleção / picking, e existem desvantagens? 3) O aplicativo existente possui várias chamadas glColorXXX. Se eu seguisse a rota do buffer de volta e usasse o glColorMask (FALSE, FALSE, FALSE, FALSE), isso transformará efetivamente as chamadas glColourXXX em chamadas que não têm efeito, permitindo que eu controle a cor em um único local ao renderizar no modo de seleção ? 4) Qual rota é a melhor / canônica?

questionAnswers(1)

yourAnswerToTheQuestion