Инстансинг против bufferGeometry против interleavedBuffer

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

До сих пор я использовал буферную геометрию, но теперь я нашел еще две вещи

  1. инстансы
  2. чередующийся буфер

Я хочу знать, что это и как они работают? Каковы их преимущества и недостатки? Они лучше для моего случая или простая буферная геометрия лучше для меня?

Можете ли вы дать мне полное сравнение между этими тремя?

1 ответ

Решение

Чередование означает, что вместо создания нескольких VBO для хранения ваших данных вы создаете их и смешиваете свои данные. Вместо одного буфера с v1,v1,v1,v2,v2,v2... и еще один с c1,c1,c1,c2,c2,c2...., у вас есть один с v1,v1,v1,c1,c1,c1,v2,v2,v2,c2,c2,c2... с разными указателями.

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

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


Экземпляр - это когда вы используете один атрибут во многих экземплярах геометрии.

Один тип будет, скажем, куб, v1,v1,v1,v2,v2,v2....v24,24,2424 вершины, описывающие куб с острыми гранями в одном атрибуте. Вы можете иметь еще один с 24 нормалями, и еще один с неопределенностью. Если вы хотите расположить это где-нибудь, вы должны использовать униформу и поработать с ней над атрибутом позиции.

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

Вы можете сделать другой, экземпляр атрибута, pos1,pos1,pos1.....pos16683,pos16683,pos16683 с 16683 позициями для этого множества экземпляров куба. Когда вы запускаете инстансированный вызов с этими атрибутами, вы можете нарисовать все 16683 экземпляра куба за один вызов. Вместо использования униформы позиции у вас будет другой атрибут.

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

Другие вопросы по тегам