2015-06-01 1 views
-2

Является ли более эффективным для меня визуализировать отдельные элементы GL_Triangle с помощью glDrawElements или рисовать элементы текстуры, а затем отображать их на другую текстуру для создания моей сцены с помощью фреймбуфера? В любом случае это произойдет каждый раз, когда графический объект будет изменен, и родительские объекты, содержащие этот объект, также должны обновляться каждый раз, когда это происходит. Thanks Я просто создаю объекты более высокого уровня, чтобы эффективно рисовать большие сцены. Идея состоит в том, чтобы иметь графическое дерево и только перерисовывать части дерева по мере необходимости до корня для отдельного куба внутри моей сцены.Самый эффективный способ рисовать 3d-графику в OpenGL?

+0

также любые предложения, как я могу обнаружить, когда вся сцена из выбранной перспективы непрозрачна, поэтому мне не нужно отображать более отдаленные кубы, составляющие сцену? «Подумайте о миниатюре»? –

ответ

2

Процесс выполнения обновлений только на «поврежденных» участках экрана очень сложно сделать правильно (и эффективно) в интерактивном приложении (например, в игре «Minecraft»), где «смотреть», направление меняется часто. Вероятно, он никогда не будет более эффективным или ограниченным объемом памяти, поскольку просто визуализирует всю сцену в каждом кадре.

Учитывайте (частой) случай изменения камеры. Каждый пиксель на экране должен быть обновлен. В этом случае нет смысла обнаруживать «поврежденные» части - весь экран поврежден, и любое время, потраченное во время обнаружения, теряется.

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

Мое предложение было бы искать возможности оптимизации в другом месте.

-1

Вы не можете. Если вы перемещаете камеру, необходимо перерисовать сцену (что представляет собой современная компьютерная графика в реальном времени).

Обратите внимание, что нет исключения, если у вас есть перспективная проекция (нет никакого особого движения, которое поможет вам сэкономить от перерисовки. Ну, если вы перевернуть камеру вверх или влево/вправо вы можете просто инвертировать окончательное изображение, но это не «полезное» движение в любом случае).

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

Если вы принимаете «искажения», вы можете использовать обманщики tecnique. Предположим, что вы делаете пакет из 100x100x100 кубов одновременно. Вы можете заменить кубики 100x100x100 на один большой куб (у которого есть только 3 видимых лица, и вы должны вручную обновить эти 3 лица). Он будет выглядеть как призматический куб, если вы быстро двигаетесь, у вас будет впечатление, что горизонт наполнен гигантскими кристаллами (что может быть приятным эффектом .. если понадобится).

Но я очень подозреваю, что это будет медленнее, чем рендеринг кубической партии. (попробуйте и вы увидите)