В целом, как вы, вероятно, знаете, код JOGL транслируется непосредственно из любых других примеров OpenGL, которые вы можете увидеть в Интернете.
GL_SELECT
сбор на основе, кажется, очень не в пользу в эти дни; устарел в спецификации и плохо реализован драйверами.
Альтернативы, которые вы можете использовать:
Визуализация каждого объекта с уникальным цветом (и все освещение / туман и т. Д. Отключены), чтобы вы могли определить, над каким объектом находится мышь, с помощью glReadPixels
. (Очистка буферов после этапа выбора, чтобы вы могли затем визуализировать вашу обычную графику). Этот подход объясняется лучшим ответом в OpenGL GL_SELECT или ручным обнаружением столкновений? , например.
Приведение лучей в вашу геометрию (см. Ссылку для выбора часто задаваемых вопросов ниже). Это также означает, что вам не нужно иметь активный контекст gl в потоке, из которого вы вызываете код, fwiw.
Я использовал оба этих метода в одном и том же приложении, в настоящее время получая хорошие результаты с последним, но поскольку большинство объектов в этом приложении являются сферами, это намного дешевле, чем это может быть для произвольных моделей.
http://www.opengl.org/resources/faq/technical/selection.htm