У меня есть 3d-сцена с множеством простых объектов (их может быть огромное количество), поэтому я думаю, что не очень хорошая идея использовать трассировку лучей для выбора объектов мышью.
Я хотел бы сделать что-то вроде этого:
визуализировать все эти объекты в некоторый внеэкранный буфер opengl, используя указатель на текущий объект вместо его цвета
визуализировать ту же сцену на экране, используя реальные цвета
Является ли это возможным? Если да — какой тип буфера я могу выбрать для «рисования указателями»?
Я полагаю, вы можете сделать в два прохода. Сначала в буфер или данные текстуры, которые вам нужны для выбора, а затем во второй передаче отображаемые данные. Я не очень знаком с OGL, но в DirectX вы можете сделать это так: http://www.two-kings.de/tutorials/dxgraphics/dxgraphics16.html. Затем вы можете найти способ проанализировать текстуру. Имейте в виду, что вы визуализируете данные дважды, что не обязательно удваивает время рендеринга (поскольку вам не нужно применять все ваши шейдеры и эффекты), но это будет значительно увеличено. Кроме того, для каждого кадра вы, по сути, отправляете не менее 2 МБ данных (если вы выбираете 1 байт на пиксель на 2K-мониторе) из графического процессора в ЦП, но это может измениться, если у вас на экране более 256 объектов.
Изменить: Вот как сделать то же самое с OGL, хотя я не могу убедиться, что учебник правильный: http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-14-render-to-texture/ (Есть еще много, если вы посмотрите на Google)
Других решений пока нет …