Не совсем дубликат, но см. Также: Как получить объект в трехмерном пространстве WebGL из координаты щелчка мыши
Помимо непроецирования и приведения луча (а затем выполнения испытаний на пересечение спо мере необходимости), ваш лучший выбор, чтобы посмотреть на «комплектации».Это не даст точные трехмерные координаты, но это полезная замена для непроецирования, когда вы заботитесь только о том, на каком объекте щелкнули , и вам не нужна точность на пиксель.
Выбор в WebGL означает визуализацию всей сцены (или, по крайней мере, интересующих вас объектов) с использованием определенного шейдера.Шейдер отображает каждый объект с другим уникальным идентификатором, который кодируется в красном и зеленом каналах, используя синий канал в качестве ключа (не синий означает отсутствие интересующего объекта).Сцена отображается в закадровом кадровом буфере, так что она не видна конечному пользователю.Затем вы читаете, используя gl.readPixels (), интересующий пиксель или пиксели и видите, какой идентификатор объекта был закодирован в данной позиции.
Если это поможет, см. мою собственную реализацию выбора WebGL..Эта реализация выбирает прямоугольную область пикселей;переход в область 1x1 приводит к выбору в одном пикселе.См. Также функции в строках 146, 162 и 175.