Если вы можете, выберите процессор, рассчитав луч от глаза через указатель мыши и пересекая его с вашими моделями.
Если это не вариант, я бы использовал какой-то тип рендеринга идентификаторов. Назначьте каждому объекту, который вы хотите выбрать уникальный цвет, визуализируйте объекты с этими цветами и, наконец, считайте цвет из буфера кадров под указателем мыши.
РЕДАКТИРОВАТЬ: Если вопрос заключается в том, как построить луч из координат мыши, вам необходимо следующее: матрица проекции P и преобразование камеры C, Если координаты указателя мыши равны (x, y) , а размер области просмотра равен (ширина, высота) одна позиция в пространстве клипа вдоль луча:
mouse_clip = [
float(x) * 2 / float(width) - 1,
1 - float(y) * 2 / float(height),
0,
1]
(обратите внимание, что я перевернул ось y, поскольку часто координаты мыши находятся в верхнем левом углу)
Справедливо также следующее:
mouse_clip = P * C * mouse_worldspace
Что дает:
mouse_worldspace = inverse(C) * inverse(P) * mouse_clip
Теперь у нас есть:
p = C.position(); //origin of camera in worldspace
n = normalize(mouse_worldspace - p); //unit vector from p through mouse pos in worldspace