我正在尝试使用QT3D库将.OBJ文件加载到QT中。到目前为止,我的代码主要从其中一个示例中复制:
Qt3DCore::QEntity *createScene()
{
// Root entity
Qt3DCore::QEntity *rootEntity = new Qt3DCore::QEntity;
// Material
Qt3DRender::QMaterial *material = new Qt3DExtras::QPhongMaterial(rootEntity);
// Chest Entity
Qt3DCore::QEntity *chestEntity = new Qt3DCore::QEntity(rootEntity);
Qt3DRender::QMesh *chestMesh = new Qt3DRender::QMesh(rootEntity);
chestMesh->setSource(QUrl("qrc:/PT18E.obj"));
chestEntity->addComponent(chestMesh);
chestEntity->addComponent(material);
return rootEntity;
}
int main(int argc, char* argv[])
{
QGuiApplication app(argc, argv);
Qt3DExtras::Qt3DWindow view;
Qt3DCore::QEntity *scene = createScene();
// Camera
Qt3DRender::QCamera *camera = view.camera();
camera->lens()->setPerspectiveProjection(45.0f, 16.0f/9.0f, 0.1f, 1000.0f);
camera->setPosition(QVector3D(0, 0, 1));
camera->setViewCenter(QVector3D(0, 0, 0));
// For camera controls
Qt3DExtras::QOrbitCameraController *camController = new Qt3DExtras::QOrbitCameraController(scene);
camController->setLinearSpeed( 10.0f );
camController->setLookSpeed( 180.0f );
camController->setCamera(camera);
view.setRootEntity(scene);
view.show();
return app.exec();
}
到目前为止,应用程序可以渲染对象并显示它。但是,我必须将.OBJ文件附加到QRC文件,以便它能够找到并渲染它。当我尝试使用任何目录中的绝对路径来设置chestMesh
的源时,例如,
chestMesh->setSource(QURL(C:/Users/username/Documents/Qt/simple-cpp/PT18E.obj))
它不起作用。没有什么可以渲染的,我在控制台中看到错误说
QFSFileEngine::open: No file name specified
我尝试在QFile
对象中添加完全相同的路径,并使用exists
函数来查看路径是否正确,并肯定的是。但是由于某种原因,网格无法使用不在QRC文件中的源。
如何从文件系统(不必将其放入QRC中)加载和渲染任何.OBJ文件?
用于构成指向文件的正确URL,我们可以尝试静态调用QURL :: FromlocalFile。或给出以上代码:
chestMesh->setSource(QUrl::fromLocalFile(winPath2ObjFile));