Qt3D 加载obj不显示的问题

1 篇文章 0 订阅

        最近研究Qt3D加载obj文件的方法,参考网上的一些方法始终不显示,经过多次尝试发现是调用的路径问题,原代码段如下是所示,是先将模型加载到资源文件中,再使用相对路径,这样始终不显示。

Qt3DRender::QMesh *mesh = new Qt3DRender::QMesh();
mesh->setSource(QUrl::fromLocalFile("qrc:/source/toyplane.obj"));

        改为如下任意一种,均可以正常显示。

Qt3DRender::QMesh *mesh = new Qt3DRender::QMesh();
mesh->setSource(QUrl::fromLocalFile(":/source/toyplane.obj"));
或
mesh->setSource(QUrl("qrc:/source/toyplane.obj"));
或
mesh->setSource(QUrl("file:///E:/Qt/Qt3D/Test3D/source/toyplane.obj"));

        在上概述编辑正确的情况下,仍然不显示,也可能是比例或坐标没设置好,显示的图形看不到。可以尝试多次修改以下setScale,setTranslation参数试试。我的问题是在比例上,原来是1.3f不显示,尝试改成0.1,就显示了一部分,说明比例还是大,改成0.01就可以完全显示了。

    Qt3DCore::QTransform *sphereTransform1 = new Qt3DCore::QTransform();
    sphereTransform1->setScale(0.01f);
    sphereTransform1->setTranslation(QVector3D(.0f, 0.0f, 19.45f));

Qt3D加载 obj 模型并设置材质的示例代码如下: ```cpp // 创建一个 Entity 用于加载模型 Qt3DCore::QEntity *modelEntity = new Qt3DCore::QEntity(); // 创建一个 Mesh 用于存储模型数据 Qt3DRender::QMesh *modelMesh = new Qt3DRender::QMesh(); modelMesh->setSource(QUrl::fromLocalFile("path/to/your/obj/model")); // 创建一个 Material 用于设置模型材质 Qt3DExtras::QDiffuseMapMaterial *modelMaterial = new Qt3DExtras::QDiffuseMapMaterial(); modelMaterial->setDiffuse(QUrl::fromLocalFile("path/to/your/texture/image")); // 将 Mesh 和 Material 添加到 Entity 中 modelEntity->addComponent(modelMesh); modelEntity->addComponent(modelMaterial); // 将 Entity 添加到场景中 Qt3DCore::QEntity *rootEntity = new Qt3DCore::QEntity(); rootEntity->addChild(modelEntity); // 创建一个视角摄像机并设置其位置和方向 Qt3DRender::QCamera *cameraEntity = view->camera(); cameraEntity->setPosition(QVector3D(0, 0, 40)); cameraEntity->setViewCenter(QVector3D(0, 0, 0)); // 创建一个渲染视图并设置其场景和摄像机 Qt3DExtras::Qt3DWindow *view = new Qt3DExtras::Qt3DWindow(); Qt3DExtras::QForwardRenderer *renderer = new Qt3DExtras::QForwardRenderer(); renderer->setCamera(cameraEntity); view->setRootEntity(rootEntity); view->setActiveFrameGraph(renderer); ``` 其中,`QMesh` 类用于存储模型数据,`QDiffuseMapMaterial` 类用于设置模型材质。在示例代码中,我们通过 `setSource` 方法加载 obj 模型文件,通过 `setDiffuse` 方法设置纹理图片。最后,将 Mesh 和 Material 添加到 Entity 中,再将 Entity 添加到场景中,最终显示出模型。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值