Инстансинг против bufferGeometry против interleavedBuffer
Мне нужно нарисовать тысячи точек и линий, которые имеют атрибуты положения, размера и цвета, и их положение является динамическим (интерактивное при перетаскивании).
До сих пор я использовал буферную геометрию, но теперь я нашел еще две вещи
- инстансы
- чередующийся буфер
Я хочу знать, что это и как они работают? Каковы их преимущества и недостатки? Они лучше для моего случая или простая буферная геометрия лучше для меня?
Можете ли вы дать мне полное сравнение между этими тремя?
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,24
24 вершины, описывающие куб с острыми гранями в одном атрибуте. Вы можете иметь еще один с 24 нормалями, и еще один с неопределенностью. Если вы хотите расположить это где-нибудь, вы должны использовать униформу и поработать с ней над атрибутом позиции.
Если вы хотите создать 16683 куба, каждый с отдельной позицией, вы можете выполнить вызов отрисовки с той же границей куба (атрибутами), но с изменяемой униформой позиции каждый раз.
Вы можете сделать другой, экземпляр атрибута, pos1,pos1,pos1.....pos16683,pos16683,pos16683
с 16683 позициями для этого множества экземпляров куба. Когда вы запускаете инстансированный вызов с этими атрибутами, вы можете нарисовать все 16683 экземпляра куба за один вызов. Вместо использования униформы позиции у вас будет другой атрибут.
В случае ваших очков это не имеет смысла, так как они сопоставлены 1:1 с атрибутом. Это означает, что вы назначаете положение одной точки внутри этого атрибута, и вам больше не нужно преобразовывать ее с помощью какой-либо униформы. С помощью инстансинга вы можете превратить свою точку зрения в нечто более сложное, скажем, в куб.