Каков наиболее эффективный способ рисования вокселей (кубов) в opengl? - PullRequest
14 голосов
/ 25 сентября 2010

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

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

Еще одна мысль, может быть, я могу нарисовать несколько кубов, используявызов drawelements?

Может быть, есть лучший метод, о котором я не знаю?Любая помощь приветствуется.

Ответы [ 3 ]

13 голосов
/ 25 сентября 2010

Рисование вокселей кубиками - почти всегда неправильный путь (исключительный случай - трассировка лучей).Обычно вы хотите поместить данные в 3D-текстуру и визуализировать фрагменты в зависимости от положения камеры.См. Эту страницу: https://developer.nvidia.com/gpugems/GPUGems/gpugems_ch39.html, и вы можете найти другие методы, выполнив поиск "Volume Rendering GPU".

6 голосов
/ 25 сентября 2010

То, что вы ищете, называется инстансингом. Вы можете взглянуть на glDrawElementsInstanced и glDrawArraysInstanced для нескольких возможностей. Обратите внимание, что они были добавлены в качестве основных операций относительно недавно (OGL 3.1), но были доступны в качестве расширений довольно долго.

У nVidia OpenGL SDK есть пример рисования в OpenGL.

0 голосов
/ 09 декабря 2016

Во-первых, вы действительно должны смотреть на OpenGL 3+, используя GLSL.Это было стандартом в течение достаточно долгого времени.Во-вторых, большинство реализаций Minecraft-esque используют создание сетки на стороне процессора.Этот метод включает просмотр всех позиций блока и создание объекта буфера вершин, который визуализирует треугольники всех открытых граней.VBO генерируется только при изменении вокселей и сохраняется между кадрами.Идеальная реализация будет сочетать копланарные грани одной и той же текстуры в более крупные грани.

...