在Qt3D中渲染类似对象的有效方法?

在Qt3D中渲染类似对象的有效方法?,qt,qt3d,Qt,Qt3d,我需要渲染数百个共享网格和材质的对象(并且具有不同的QTransforms)。我找到的唯一方法是为它们中的每一个创建QEntity的实例。每一个都会包含一个网格和材质的实例,这会造成时间和内存的巨大浪费 有没有办法让这更有效?我知道,使用原始OpenGL可以重用网格和着色器加载一次,并在同一帧中多次使用不同的变换和着色器参数。Qt3D可能有类似的功能?您可以在多个实体上使用相同的网格或材质,方法是将它们添加到每个实体的组件列表中: QEntity *root = new QEntity(); Q

我需要渲染数百个共享网格和材质的对象(并且具有不同的
QTransform
s)。我找到的唯一方法是为它们中的每一个创建
QEntity
的实例。每一个都会包含一个网格和材质的实例,这会造成时间和内存的巨大浪费


有没有办法让这更有效?我知道,使用原始OpenGL可以重用网格和着色器加载一次,并在同一帧中多次使用不同的变换和着色器参数。Qt3D可能有类似的功能?

您可以在多个实体上使用相同的网格或材质,方法是将它们添加到每个实体的组件列表中:

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);

虽然可以在多个实体之间共享网格,但渲染同一几何体数千次的最有效方法是使用实例渲染(因为最终只需一次绘制调用,而不是数千次)

请参见Qt 3D附带的示例