Как мне создать куб из маленьких кубиков (вокселей)? - PullRequest
0 голосов
/ 29 октября 2018

Я новичок в области графики, поэтому я прошу мнения и предложения.

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

Один из способов - использовать рендеринг с использованием экземпляров В Direct3D я мог бы использовать два буфера: Первый буфер будет содержать данные для одного экземпляра куба (например, положения вершин, координаты текстуры, нормали и т. Д.). Второй буфер будет содержать позицию для каждого вокселя во втором буфере.

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Во-первых, я предполагаю, что ваши большие кубы являются динамическими: они могут перемещаться / вращаться, а также их воксели могут быть скрыты / видимы динамически. Если все статично, есть лучшие способы сделать это, чем этот ответ.

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

Теперь, чтобы иметь возможность скрыть любой воксел, вы можете воспользоваться этим трюком: в своем буфере данных экземпляра вы можете добавить значение масштаба вместе с позицией, а затем просто установить масштаб на ноль, если вы хотите скрыть воксель .

0 голосов
/ 31 октября 2018

Есть много разных способов визуализации вокселей с их различными плюсами и минусами. Из вопроса звучит так, будто вы идете по сценарию Minecraft.

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

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

Для повышения производительности можно применять дополнительные алгоритмы скрытия, чтобы избежать добавления скрытых треугольников в буферы вершин.

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

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