Независимо от того, где вы выполняете свои преобразования, у вас обычно будет матрица модели, которая описывает, где каждый объект находится на сцене.Вместо того, чтобы преобразовывать каждый объект в мировое пространство просто так, чтобы вы могли проверить его пересечение с лучом мирового пространства, вы также можете преобразовать луч в пространство объектов каждого объекта путем преобразования луча с помощью матрицы обратной модели.
Одна общая проблема с трассировкой лучей заключается в том, что по мере увеличения вашей сцены тестирование методом грубой силы каждого объекта будет становиться все более медленным.Вы можете использовать ускоряющие структуры, такие как Octree или Bounding Volume Hierarchy, чтобы ускорить процесс.Совершенно другой подход, когда дело доходит до выбора, будет просто визуализировать буфер идентификатора, то есть буфер, который имеет то же разрешение, что и текущий визуализированный кадр, и для каждого пикселя сохраняет идентификатор объекта, который виден в этом пикселе.Затем вы можете просто прочитать значение пикселя под курсором, чтобы узнать, по какому объекту вы ударили, без необходимости трассировки лучей.Рендеринг буфера идентификатора может быть выполнен как отдельный проход или может быть просто добавлен как дополнительная цель рендеринга к уже выполненному вами проходу, например, предварительное заполнение буфера глубины или просто при рендеринге сцены, если вы делаете только один проход.