Выбор мышью с использованием рендеринга вне экрана?

У меня есть 3d-сцена с множеством простых объектов (их может быть огромное количество), поэтому я думаю, что не очень хорошая идея использовать трассировку лучей для выбора объектов мышью.

Я хотел бы сделать что-то вроде этого:

  1. визуализировать все эти объекты в некоторый внеэкранный буфер opengl, используя указатель на текущий объект вместо его цвета

  2. визуализировать ту же сцену на экране, используя реальные цвета

  3. когда пользователь выбирает точку с (x, y) экранными координатами, я беру значение из буфера вне экрана (из соответствующей позиции) и получаю указатель на объект

Является ли это возможным? Если да — какой тип буфера я могу выбрать для «рисования указателями»?

2

Решение

Я полагаю, вы можете сделать в два прохода. Сначала в буфер или данные текстуры, которые вам нужны для выбора, а затем во второй передаче отображаемые данные. Я не очень знаком с 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)

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]