Selection / glRenderMode (GL_SELECT) - PullRequest
       7

Selection / glRenderMode (GL_SELECT)

1 голос
/ 05 марта 2010

Чтобы сделать выбор объектов в OpenGL, действительно ли мне нужно визуализировать сцену дважды?

Я понимаю, что рендеринг сцены должен быть дешевым со скоростью 30 кадров в секунду.

Но если каждому объекту выделения требуется дополнительный вызов для RenderScene ()

тогда, если я нажимаю 30 раз в секунду, то графический процессор должен рендерить в два раза больше?

Ответы [ 3 ]

3 голосов
/ 05 марта 2010

Один общий трюк - иметь две отдельные функции для рендеринга вашей сцены. Когда вы находитесь в режиме выбора, вы можете визуализировать упрощенную версию мира без вещей, которые вы не хотите выбирать. Таким образом, ландшафт, инертные объекты и т. Д. Вообще не нужно визуализировать.

Время рендеринга урезанной сцены должно быть намного меньше, чем время рендеринга полной сцены. Даже если вы щелкаете 30 раз в секунду (!), На вашу частоту кадров не должно сильно влиять.

2 голосов
/ 05 марта 2010

Прежде всего, единственный способ получить 30 щелчков мыши в секунду - это если у вас есть другой код, имитирующий щелчки мышью.Для человека 10 щелчков в секунду было бы довольно быстро - и при этом у них не было бы никакой возможности посмотреть на то, что они выбрали - это просто нажатие кнопки как можно быстрее.

Во-вторых, когда вы используете GL_SELECT, вы обычно хотите использовать gluPickMatrix, чтобы придать ему небольшую область для рендеринга, обычно, скажем, квадрат 10х10 пикселей, центрированный по точке щелчка.По крайней мере, в типичном случае, подавляющее большинство объектов выпадает полностью за пределы этой области и немедленно отбраковывается (не будет отображаться вообще).Это ускоряет этот проход рендеринга чрезвычайно в большинстве случаев.

0 голосов
/ 05 марта 2010

Уже было несколько хороших предложений о том, как оптимизировать комплектацию в GL. Это, вероятно, будет работать для вас.

Но если вам нужно больше производительности, чем вы можете выжать из gl-комплектования, тогда вы можете подумать о том, чтобы делать то, что делает большинство игровых движков. Поскольку большинство двигателей уже имеют какую-то форму системы обнаружения столкновений в 3D-формате, ее можно использовать гораздо быстрее. Отключите экранные координаты щелчка и запустите тест столкновения лучей с миром, чтобы увидеть, на что щелкнули. Вы не можете использовать GPU, но объем работы намного меньше. Даже меньше, чем работа по настройке на стороне процессора, которую требует gl-picking.

Выберите на основе более простых корпусов столкновений или даже просто ограничивающих рамок. Производительность масштабируется по количеству объектов / корпусов в сцене, а не по количеству геометрии плюс количество объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...