Эффективный способ визуализации похожих объектов в Qt3D?

Мне нужно визуализировать сотни объектов, разделяющих их сетку и материал (и имеющих разные QTransformс). Единственный способ, который я нашел, - это создать экземпляр QEntity для каждого из них. Каждый будет содержать экземпляр сетки и материала, что приведет к огромной трате времени и памяти.

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

2 ответа

Вы можете использовать одну и ту же сетку или материал на нескольких объектах, добавив их в список компонентов каждого объекта:

QEntity *root = new QEntity();
QMesh *mesh = new QMesh(root);
QEntity *item1 = new QEntity (root);
QEntity *item2 = new QEntity (root);
item1->addComponent(mesh);
item2->addComponent(mesh);

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

Смотрите пример instanced-arrays-qml, который поставляется с Qt 3D.

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