我是 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]
}
uj5u.com熱心網友回復:
事實證明,可以按如下方式訪問原始資料:
在 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()回報QSharedPointer指向它,然后operator()()回傳幾何。如果我們自己構建緩沖區、屬性和幾何圖形,那么我們可以簡單地通過以下方式訪問資料:
part0Mesh->geometry()->attributes().value(0)->buffer()->data();
通過閱讀qmesh.cpp的源代碼弄清楚了。新手很難;)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/349135.html
