Что ж, вы действительно можете предоставить информацию о треугольнике для вызова DrawElements.Затем вам нужно будет предоставить соответствующие массивы (бывший COLOR_ARRAY, TEXTURE_COORD_ARRAY и т. Д., Теперь обычно называемый VertexAttribArrays).Это, вероятно, было бы самым простым решением, если вы настаиваете на графическом процессоре.
Однако, обычно, путь может быть - запустить луч из точки щелчка в вашу сцену.Следовательно, вам нужно будет не трансформировать каждый треугольник, а рассчитать тест пересечения между вашим лучом и вашими треугольниками.Если луч пересекается, вы попадаете в него, если нет.Это действительно может дорого обойтись, если вы сделаете это грубой силой.
Однако, как правило, ваши треугольники содержатся в некоторой пространственной структуре данных (то есть ваш граф сцены будет / может / должен иметь несколько представлений)как октри (например, http://en.wikipedia.org/wiki/Octree). Это позволит получить ответ о столкновении в нескольких тестах. Кроме того, вы можете принять во внимание конечный размер, который треугольник будет занимать на экране (поэтому было бы совершенно бессмысленно выбирать субпиксель).треугольники в большинстве случаев).
И если вы действительно хотите получить фантазию, вы также можете поместить весь процесс в графический процессор (один из примеров, который звучит интересно, например, http://blog.xeolabs.com/ray-picking-in-scenejs,, но будетеще больше, когда вы используете google).
Лично мне проще всего реализовать решение b) Software Ray Picking, затем a) и, наконец, выбор GPU.Начните с самого простого, улучшайте его, если считаете, что оно недостаточно быстрое.Не стоит слишком увлекаться преждевременной оптимизацией (например, на моем iPhone отлично работает подбор лучей;).Удачи и удачи с вашим выбором.