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的源代码弄明白了。对新手来说很难 ;)
我是 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的源代码弄明白了。对新手来说很难 ;)