Эффективный способ визуализации похожих объектов в 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.