QML中,Mesh中顶点坐标的数据存放在哪里?

In QML, where is the data of vertex coordinates stored in Mesh?

我是 Qt 新手。我设法加载“.obj”文件并在我的“main.qml”中使用 Mesh 显示 3D 模型。事实上,我所做的只是设置文件的来源。在“ObjectPicker”的帮助下,我可以知道三角形顶点的索引。但是,我不知道如何到达那些顶点的坐标。

Mesh 自己加载数据。由于我没有为它编写几何、属性和缓冲区,我在哪里以及如何获取顶点坐标?

部分代码如下所示。我将拾取方法设置为TrianglePicking。非常感谢!

    Entity{
        id: part0Entity;
        objectName: "part0Entity";
        enabled: true;
        Connections{
            target: visEnt0;
            onClicked:{
                part0Entity.enabled = !part0Entity.enabled;
            }
        }
        Mesh{
            id: part0Mesh;
            source: "file:/home/zhaoyiji/Desktop/SF6-C1400/part0.obj"
        }

        Transform{
            id: part0Transform;
            matrix: Qt.matrix4x4();
        }
        DiffuseSpecularMaterial{
            id: part0Diffuse;
            ambient: "#80DC143C";
        }
        ObjectPicker{
            id: part0Picker;
            dragEnabled: true;
            onClicked: {
                if (pick.button == PickEvent.MiddleButton){
                    console.log(pick.worldIntersection)
                }
            }
        }

        components: [part0Mesh, part0Transform, part0Diffuse, part0Picker]
    }

原来可以这样访问原始数据:

在main.cpp中:

QQuickView view;
view.setSource(QUrl("qrc:/main.qml"));
auto part0Mesh = view.rootObject()->findChild<Qt3DRender::QMesh *>("part0Mesh");
qDebug()<<part0Mesh->geometryFactory()->operator()()->attributes().value(0)->buffer()->data();

在 qml 中:

Mesh{
    id: part0Mesh;
    objectName: "part0Mesh";
    source: "file:/YourFilePath/YourFileName.obj"
}

这是为了QMesh的自动加载。将有一个仿函数从我们设置的源加载数据。 geometryFactory() returns 指向它的 QSharedPointer,然后 operator()() returns 几何。如果我们自己构建缓冲区、属性和几何图形,那么我们可以通过以下方式简单地访问数据:

part0Mesh->geometry()->attributes().value(0)->buffer()->data();

通过阅读qmesh.cpp的源代码弄明白了。对新手来说很难 ;)