我需要渲染数百个共享其网格和材质的对象(并且具有不同的QTransform
s)。我找到的唯一方法是为每个人创建一个QEntity
的实例。每个都将持有网格和材料的实例,导致浪费大量时间和内存。
有没有办法让这更有效率?我知道使用原始OpenGL可以重用网格和着色器加载它们一次并在同一帧中多次使用不同的变换和着色器参数。也许Qt3D有类似的东西?
答案 0 :(得分:0)
您可以在多个实体上使用相同的网格或材质,方法是将它们添加到每个实体的组件列表中:
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);
答案 1 :(得分:0)
虽然您可以在多个实体之间共享网格,但是渲染相同几何体几千次的最有效方法是使用实例化渲染(因为您最终会得到一次绘制调用而不是数千次)。
请参阅Qt 3D附带的instanced-arrays-qml示例。