Самый простой способ в этом случае - использовать дважды gluUnproject, один раз с Z, установленным на ближний, и один раз с Z, установленным на дальний, который даст вам луч, идущий «в» экран.Если луч пересекает сферу (тривиально), то пользователь щелкнул по ней.В противном случае, нет.
В качестве альтернативы, вы можете прочитать значение буфера z в этом пикселе (это будет остановка конвейера, но вы можете использовать предыдущий кадр, и если анимация не будет полностью дикой, никто, вероятно, не заметит).Это даст вам одну точку в 3D с помощью gluUnproject.Что еще более тривиально для проверки, потому что, если она находится на сфере, то радиус (dx * dx + dy * dy + dz * dz) должен быть радиусом.Чтобы учесть ошибки округления, вы можете сравнить радиус <= 1.0001 * или около того. </p>
И, наконец, вы можете сделать запрос окклюзии с окном просмотра 1x1 пикселей.Это не очень полезно для сферы, поскольку проверка столкновений намного проще, но это может быть чем-то, что вы хотите сделать с гораздо более сложным объектом, который может иметь дыры и где вам нужно детектирование с точностью до пикселя.