如何从QT 5.9中的任何目录中渲染.OBJ文件



我正在尝试使用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));

相关内容

  • 没有找到相关文章

最新更新