qt QMesh加载obj不显示

项目场景:

qt QMesh加载obj不显示


原因分析:

如果您在Qt中使用QMesh加载OBJ文件时遇到了显示问题,有几个可能的原因和解决方法:

  1. 检查文件路径:确保您提供的OBJ文件路径是正确的,并且文件存在于该位置。您可以使用绝对路径或相对路径来指定文件路径。

  2. 检查文件格式:确保OBJ文件的格式正确,并且文件没有损坏。您可以尝试使用其他软件或在线工具打开OBJ文件,以确保它可以正确显示。

  3. 检查文件内容:OBJ文件可能包含不受支持的功能或数据类型,导致无法正确加载和显示。您可以尝试使用其他OBJ文件进行测试,以确定问题是否与特定文件相关。

  4. 检查渲染设置:确保您的渲染设置正确配置。您可以检查是否正确设置了光照、材质和纹理等属性,以确保正确显示OBJ文件。

  5. 检查OpenGL版本:如果您使用的是较旧的OpenGL版本,可能会导致无法正确加载和显示OBJ文件。尝试更新您的OpenGL版本或使用兼容的OpenGL库。

  6. 检查错误消息:如果加载OBJ文件时发生错误,Qt可能会生成错误消息。检查错误消息以获取更多信息,并根据错误消息进行故障排除和修复。

  7. 检查OBJ文件路径:确保OBJ文件的路径是正确的。您可以尝试使用绝对路径来加载OBJ文件,例如file:///path/to/your/file.obj,并确保文件存在。

  8. 检查OBJ文件格式:确保OBJ文件的格式正确,并且文件没有损坏。您可以尝试使用其他的OBJ文件来验证加载是否正常。

  9. 检查模型的缩放和位置:请确保模型的缩放和位置设置正确,以便在3D视图中可见。您可以尝试调整setScale和setTranslation方法的参数来调整模型的大小和位置。

  10. 检查材质设置:您的代码中注释掉了设置材质的部分,如果您希望模型有颜色或纹理,请确保正确设置材质。

  11. 检查相机设置:请确保相机的位置和视角设置正确,以便正确观察模型。您可以尝试调整setPosition和setViewCenter方法的参数来调整相机的位置和视角。

  12. 检查光源设置:请确保光源设置正确,以便正确照亮模型。您可以尝试调整光源的位置和强度来调整光照效果。


解决方案:

  1. 先在线加载obj文件

在线加载链接: https://imagetostl.com/cn/view-obj-online

  1. 加载文件加入了qt资源当中
    baserMesh->setSource(QUrl(“qrc:/arm/baser1.obj”));
    使用qrc路径

3.注意视图的背景颜色,位置和缩放比例等等
//设置颜色
view->defaultFrameGraph()->setClearColor(QColor(QRgb(0xdcdcdc)));

  1. 我的模型会比较大,所以比例调的很小。以下是我的完整能显示的代码
#include "include/robotarm3d.h"

robotArm3D::robotArm3D(QWidget *parent) : QWidget(parent)
{
    //创建3D视图
    view = new Qt3DExtras::Qt3DWindow();
    //设置颜色
    view->defaultFrameGraph()->setClearColor(QColor(QRgb(0xdcdcdc)));

    //一个widget 容纳3d视图
    container = QWidget::createWindowContainer(view);
    //获取视图的大小
    QSize screenSize = view->screen()->size();
    container->setMinimumSize(QSize(880, 580));//最小
    container->setMaximumSize(screenSize);//最大

    //界面布局水平-3D视图、垂直布局
    widget = new QWidget(this);
//    widget->setMinimumSize();
    widget->isFullScreen();
    QHBoxLayout *hLayout = new QHBoxLayout(widget);
    QVBoxLayout *vLayout = new QVBoxLayout();
    vLayout->setAlignment(Qt::AlignTop);
    hLayout->addWidget(container, 1);
    hLayout->addLayout(vLayout);
    //设置标题
    widget->setWindowTitle(QStringLiteral("基本图形"));
    //3D场景的输入
    Qt3DInput::QInputAspect *input = new Qt3DInput::QInputAspect;
    view->registerAspect(input);
    //根实体
    Qt3DCore::QEntity *rootEntity = new Qt3DCore::QEntity();
    //获取3D视图的相机实体
    Qt3DRender::QCamera *cameraEntity = view->camera();
    //相机实体参数的设置
    cameraEntity->setPosition(QVector3D(0, -400, 400)); //设置相机位置为(0, 0, 10)
    cameraEntity->setViewCenter(QVector3D(0, 0, 0));//视角中心,相机观察点
    cameraEntity->setFieldOfView(45.0);//相机视角45度

    //光源实体->根实体
    Qt3DCore::QEntity *lightEntity = new Qt3DCore::QEntity(rootEntity);
    Qt3DRender::QPointLight *light = new Qt3DRender::QPointLight(lightEntity);
    light->setColor("white");//设置白光
    light->setIntensity(1);//光的强度
    lightEntity->addComponent(light);
    //变换 光的位置和相机位置一致
    Qt3DCore::QTransform *lightTransform = new Qt3DCore::QTransform(lightEntity);
    lightTransform->setTranslation(cameraEntity->position());
    lightEntity->addComponent(lightTransform);
    // For camera controls
    Qt3DExtras::QFirstPersonCameraController *camController = new Qt3DExtras::QFirstPersonCameraController(rootEntity);
    camController->setCamera(cameraEntity);

    // ! 车身
    Qt3DRender::QMesh *carbaseMesh = new Qt3DRender::QMesh();
    carbaseMesh->setSource(QUrl("qrc:/arm/carbase.obj"));
    carbaseMesh->setMeshName(tr("车身"));
    qDebug() << carbaseMesh->status() << carbaseMesh->source() << endl;
    //TorusMesh Transform
    Qt3DCore::QTransform *carbaseTransform = new Qt3DCore::QTransform();
    carbaseTransform->setScale(0.05f);
    carbaseTransform->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(0.0f, 1.0f, 0.0f), 0.0f));
    carbaseTransform->setTranslation(QVector3D(0.0f, 0.0f, 0.0f));
    //Material
    Qt3DExtras::QPhongMaterial *carbaseMaterial = new Qt3DExtras::QPhongMaterial();
    carbaseMaterial->setDiffuse(QColor(QRgb(0xbeb32b)));
    //创建一个实体
    Qt3DCore::QEntity *carbaseEntity = new Qt3DCore::QEntity(rootEntity);
    carbaseEntity->addComponent(carbaseMesh);
    carbaseEntity->addComponent(carbaseMaterial);
    carbaseEntity->addComponent(carbaseTransform);

    // ! 调平机构
    Qt3DRender::QMesh *baserMesh = new Qt3DRender::QMesh();//Mesh
    baserMesh->setSource(QUrl("qrc:/arm/baser1.obj"));
    baserMesh->setMeshName(tr("箱体"));
    qDebug() << baserMesh->status() << baserMesh->source() << endl;
    //Mesh Transform
    Qt3DCore::QTransform *baserTransform = new Qt3DCore::QTransform();
    baserTransform->setScale(1.0f);
//    baserTransform->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(0.0f, 1.0f, 0.0f), 25.0f));
    baserTransform->setTranslation(QVector3D(0.0f, 0.0f, 1429.66f));
    //Material
    Qt3DExtras::QPhongMaterial *baserMaterial = new Qt3DExtras::QPhongMaterial();
    baserMaterial->setDiffuse(QColor(QRgb(0x00FF7F)));
    //创建一个实体
    Qt3DCore::QEntity *baserEntity = new Qt3DCore::QEntity(carbaseEntity);
    baserEntity->addComponent(baserMesh);
    baserEntity->addComponent(baserMaterial);
    baserEntity->addComponent(baserTransform);
    // ! 箱体

    // ! 左边调平基座
    Qt3DRender::QMesh *leftbr2Mesh = new Qt3DRender::QMesh();//Mesh
    leftbr2Mesh->setSource(QUrl("qrc:/arm/left_br2.obj"));
    leftbr2Mesh->setMeshName(tr("left_br2"));
    qDebug() << leftbr2Mesh->status() << leftbr2Mesh->source() << endl;
    //Mesh Transform
    Qt3DCore::QTransform *leftbr2MeshTransform = new Qt3DCore::QTransform();
    leftbr2MeshTransform->setScale(1.0f);
    leftbr2MeshTransform->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(0.0f, 0.0f, 1.0f), 180.0f));
    leftbr2MeshTransform->setTranslation(QVector3D(-1150.0f, 0.0f, 300.0f));
    //Material
    Qt3DExtras::QPhongMaterial *leftbr2Material = new Qt3DExtras::QPhongMaterial();
    leftbr2Material->setDiffuse(QColor(QRgb(0x00FF7F)));
    //创建一个实体
    Qt3DCore::QEntity *leftbr2Entity = new Qt3DCore::QEntity(baserMesh);
    leftbr2Entity->addComponent(leftbr2Mesh);
    leftbr2Entity->addComponent(leftbr2Material);
    leftbr2Entity->addComponent(leftbr2MeshTransform);

//    // ! j1
//    Qt3DRender::QMesh *leftj1Mesh = new Qt3DRender::QMesh();//Mesh
//    leftj1Mesh->setSource(QUrl("qrc:/arm/j1.obj"));
//    leftj1Mesh->setMeshName(tr("leftj1"));
//    qDebug() << leftj1Mesh->status() << leftj1Mesh->source() << endl;
//    //Material
//    Qt3DExtras::QPhongMaterial *leftj1Material = new Qt3DExtras::QPhongMaterial();
//    leftj1Material->setDiffuse(QColor(QRgb(0xbeb32b)));
//    //Mesh Transform
//    Qt3DCore::QTransform *leftj1Transform = new Qt3DCore::QTransform();
//    leftj1Transform->setScale(1.0f);
//    leftj1Transform->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(0.0f, 0.0f, 1.0f), 0.0f));
//    leftj1Transform->setTranslation(QVector3D(250.0f, -285.0f, 78.0f));
//    //创建一个实体
//    Qt3DCore::QEntity *leftj1Entity = new Qt3DCore::QEntity(leftbr2Entity);
//    leftj1Entity->addComponent(leftj1Mesh);
//    leftj1Entity->addComponent(leftj1Material);
//    leftj1Entity->addComponent(leftj1Transform);

    // ! 右边调平基座
    Qt3DRender::QMesh *rightbr2Mesh = new Qt3DRender::QMesh();//Mesh
    rightbr2Mesh->setSource(QUrl("qrc:/arm/rig_br2.obj"));
    rightbr2Mesh->setMeshName(tr("right_br2"));
    qDebug() << rightbr2Mesh->status() << rightbr2Mesh->source() << endl;
    //Mesh Transform
    Qt3DCore::QTransform *rightbr2MeshTransform = new Qt3DCore::QTransform();
    rightbr2MeshTransform->setScale(1.0f);
    rightbr2MeshTransform->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(0.0f, 1.0f, 0.0f), 0.0f));
    rightbr2MeshTransform->setTranslation(QVector3D(1150.0f, 0.0f, 300.0f));
    //Material
    Qt3DExtras::QPhongMaterial *rightbr2Material = new Qt3DExtras::QPhongMaterial();
    rightbr2Material->setDiffuse(QColor(QRgb(0x00FF7F)));
    //创建一个实体
    Qt3DCore::QEntity *rightbr2Entity = new Qt3DCore::QEntity(baserMesh);
    rightbr2Entity->addComponent(rightbr2Mesh);
    rightbr2Entity->addComponent(rightbr2Material);
    rightbr2Entity->addComponent(rightbr2MeshTransform);

    // ! j1
    Qt3DRender::QMesh *j1Mesh = new Qt3DRender::QMesh();//Mesh
    j1Mesh->setSource(QUrl("qrc:/arm/j1.obj"));
    j1Mesh->setMeshName(tr("j1"));
    qDebug() << j1Mesh->status() << j1Mesh->source() << endl;
    //Material
    Qt3DExtras::QPhongMaterial *j1Material = new Qt3DExtras::QPhongMaterial();
    j1Material->setDiffuse(QColor(QRgb(0xbeb32b)));
    //Mesh Transform
    Qt3DCore::QTransform *j1Transform = new Qt3DCore::QTransform();
    j1Transform->setScale(1.0f);
    j1Transform->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(0.0f, 1.0f, 0.0f), 0.0f));
    j1Transform->setTranslation(QVector3D(250.0f, 285.0f, 78.0f));
    //创建一个实体
    Qt3DCore::QEntity *j1Entity = new Qt3DCore::QEntity(rightbr2Entity);
    j1Entity->addComponent(j1Mesh);
    j1Entity->addComponent(j1Material);
    j1Entity->addComponent(j1Transform);
    // ! j1

    // ! j2
    Qt3DRender::QMesh *j2Mesh = new Qt3DRender::QMesh();//Mesh
    j2Mesh->setSource(QUrl("qrc:/arm/j2.obj"));
    j2Mesh->setMeshName(tr("j2"));
    qDebug() << j2Mesh->status() << j2Mesh->source() << endl;
    //Material
    Qt3DExtras::QPhongMaterial *j2Material = new Qt3DExtras::QPhongMaterial();
    j2Material->setDiffuse(QColor(QRgb(0xbeb32b)));
    //Mesh Transform
    Qt3DCore::QTransform *j2Transform = new Qt3DCore::QTransform();
    j2Transform->setScale(1.0f);
    j2Transform->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(0.0f, 1.0f, 0.0f), 0.0f));
    j2Transform->setTranslation(QVector3D(-340.0f, 0.0f, 2428.0f));
    //创建一个实体
    Qt3DCore::QEntity *j2Entity = new Qt3DCore::QEntity(j1Entity);
    j2Entity->addComponent(j2Mesh);
    j2Entity->addComponent(j2Material);
    j2Entity->addComponent(j2Transform);
    // ! j2

    // ! j3
    Qt3DRender::QMesh *j3Mesh = new Qt3DRender::QMesh();//Mesh
    j3Mesh->setSource(QUrl("qrc:/arm/j3.obj"));
    j3Mesh->setMeshName(tr("j3"));
    qDebug() << j3Mesh->status() << j3Mesh->source() << endl;
    //Material
    Qt3DExtras::QPhongMaterial *j3Material = new Qt3DExtras::QPhongMaterial();
    j3Material->setDiffuse(QColor(QRgb(0xbeb32b)));
    //Mesh Transform
    Qt3DCore::QTransform *j3Transform = new Qt3DCore::QTransform();
    j3Transform->setScale(1.0f);
    j3Transform->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(0.0f, 1.0f, 0.0f), 0.0f));
    j3Transform->setTranslation(QVector3D(-546.0f, 0.0f, 183.0f));
    //创建一个实体
    Qt3DCore::QEntity *j3Entity = new Qt3DCore::QEntity(j2Entity);
    j3Entity->addComponent(j3Mesh);
    j3Entity->addComponent(j3Material);
    j3Entity->addComponent(j3Transform);
    // ! j3

    // ! j4
    Qt3DRender::QMesh *j4Mesh = new Qt3DRender::QMesh();//Mesh
    j4Mesh->setSource(QUrl("qrc:/arm/j4.obj"));
    j4Mesh->setMeshName(tr("j4"));
    qDebug() << j4Mesh->status() << j4Mesh->source() << endl;
    //Material
    Qt3DExtras::QPhongMaterial *j4Material = new Qt3DExtras::QPhongMaterial();
    j4Material->setDiffuse(QColor(QRgb(0xbeb32b)));
    //Mesh Transform
    Qt3DCore::QTransform *j4Transform = new Qt3DCore::QTransform();
    j4Transform->setScale(1.0f);
    j4Transform->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(0.0f, 1.0f, 0.0f), 0.0f));
    j4Transform->setTranslation(QVector3D(140.0f, 0.0f, 0.0f));
    //创建一个实体
    Qt3DCore::QEntity *j4Entity = new Qt3DCore::QEntity(j3Entity);
    j4Entity->addComponent(j4Mesh);
    j4Entity->addComponent(j4Material);
    j4Entity->addComponent(j4Transform);
    // ! j4

    // ! j5
    Qt3DRender::QMesh *j5mesh = new Qt3DRender::QMesh();//Mesh
    j5mesh->setSource(QUrl("qrc:/arm/j5.obj"));
    j5mesh->setMeshName(tr("j5"));
    qDebug() << j5mesh->status() << j5mesh->source() << endl;
    //Material
    Qt3DExtras::QPhongMaterial *j5material = new Qt3DExtras::QPhongMaterial();
    j5material->setDiffuse(QColor(QRgb(0xbeb32b)));
    //Mesh Transform
    Qt3DCore::QTransform *j5transform = new Qt3DCore::QTransform();
    j5transform->setScale(1.0f);
    j5transform->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(0.0f, 1.0f, 0.0f), 0.0f));
    j5transform->setTranslation(QVector3D(2297.0f, 0.0f, -159.443f));
    //创建一个实体
    Qt3DCore::QEntity *j5Entity = new Qt3DCore::QEntity(j4Entity);
    j5Entity->addComponent(j5mesh);
    j5Entity->addComponent(j5material);
    j5Entity->addComponent(j5transform);

    // ! j6
    Qt3DRender::QMesh *j6mesh = new Qt3DRender::QMesh();//Mesh
    j6mesh->setSource(QUrl("qrc:/arm/j6.obj"));
    j6mesh->setMeshName(tr("j6"));
    qDebug() << j6mesh->status() << j6mesh->source() << endl;
    //Material
    Qt3DExtras::QPhongMaterial *j6material = new Qt3DExtras::QPhongMaterial();
    j6material->setDiffuse(QColor(QRgb(0xbeb32b)));
    //Mesh Transform
    Qt3DCore::QTransform *j6transform = new Qt3DCore::QTransform();
    j6transform->setScale(1.0f);
    j6transform->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(0.0f, 1.0f, 0.0f), 0.0f));
    j6transform->setTranslation(QVector3D(-1461.38f, 219.0f, 78.0f));
    //创建一个实体
    Qt3DCore::QEntity *j6Entity = new Qt3DCore::QEntity(j5Entity);
    j6Entity->addComponent(j6mesh);
    j6Entity->addComponent(j6material);
    j6Entity->addComponent(j6transform);

    // ! j7
    Qt3DRender::QMesh *j7mesh = new Qt3DRender::QMesh();//Mesh
    j7mesh->setSource(QUrl("qrc:/arm/j7.obj"));
    j7mesh->setMeshName(tr("j7"));
    qDebug() << j7mesh->status() << j7mesh->source() << endl;
    //Material
    Qt3DExtras::QPhongMaterial *j7material = new Qt3DExtras::QPhongMaterial();
    j7material->setDiffuse(QColor(QRgb(0xbeb32b)));
    //Mesh Transform
    Qt3DCore::QTransform *j7transform = new Qt3DCore::QTransform();
    j7transform->setScale(1.0f);
    j7transform->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(0.0f, 1.0f, 0.0f), 0.0f));
    j7transform->setTranslation(QVector3D(100.0f, 0.0f, 0.0f));
    //创建一个实体
    Qt3DCore::QEntity *j7Entity = new Qt3DCore::QEntity(j6Entity);
    j7Entity->addComponent(j7mesh);
    j7Entity->addComponent(j7material);
    j7Entity->addComponent(j7transform);

    // ! j8
    Qt3DRender::QMesh *j8mesh = new Qt3DRender::QMesh();//Mesh
    j8mesh->setSource(QUrl("qrc:/arm/j8.obj"));
    j8mesh->setMeshName(tr("j8"));
    qDebug() << j8mesh->status() << j8mesh->source() << endl;
    //Material
    Qt3DExtras::QPhongMaterial *j8material = new Qt3DExtras::QPhongMaterial();
    j8material->setDiffuse(QColor(QRgb(0xbeb32b)));
    //Mesh Transform
    Qt3DCore::QTransform *j8transform = new Qt3DCore::QTransform();
    j8transform->setScale(1.0f);
    j8transform->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(0.0f, 1.0f, 0.0f), 0.0f));
    j8transform->setTranslation(QVector3D(2319.0f, 0.0f, 35.0f));
    //创建一个实体
    Qt3DCore::QEntity *j8Entity = new Qt3DCore::QEntity(j7Entity);
    j8Entity->addComponent(j8mesh);
    j8Entity->addComponent(j8material);
    j8Entity->addComponent(j8transform);

    // ! j9
    Qt3DRender::QMesh *j9mesh = new Qt3DRender::QMesh();//Mesh
    j9mesh->setSource(QUrl("qrc:/arm/j9.obj"));
    j9mesh->setMeshName(tr("j9"));
    qDebug() << j9mesh->status() << j9mesh->source() << endl;
    //Material
    Qt3DExtras::QPhongMaterial *j9material = new Qt3DExtras::QPhongMaterial();
    j9material->setDiffuse(QColor(QRgb(0xbeb32b)));
    //Mesh Transform
    Qt3DCore::QTransform *j9transform = new Qt3DCore::QTransform();
    j9transform->setScale(1.0f);
    j9transform->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(0.0f, 1.0f, 0.0f), 0.0f));
    j9transform->setTranslation(QVector3D(158.0f, 0.0f, 80.0f));
    //创建一个实体
    Qt3DCore::QEntity *j9Entity = new Qt3DCore::QEntity(j8Entity);
    j9Entity->addComponent(j9mesh);
    j9Entity->addComponent(j9material);
    j9Entity->addComponent(j9transform);

    // ! j10
    Qt3DRender::QMesh *j10mesh = new Qt3DRender::QMesh();//Mesh
    j10mesh->setSource(QUrl("qrc:/arm/j10.obj"));
    j10mesh->setMeshName(tr("j10"));
    qDebug() << j10mesh->status() << j10mesh->source() << endl;
    //Material
    Qt3DExtras::QPhongMaterial *j10material = new Qt3DExtras::QPhongMaterial();
    j10material->setDiffuse(QColor(QRgb(0xbeb32b)));
    //Mesh Transform
    Qt3DCore::QTransform *j10transform = new Qt3DCore::QTransform();
    j10transform->setScale(1.0f);
    j10transform->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(0.0f, 1.0f, 0.0f), 0.0f));
    j10transform->setTranslation(QVector3D(30.0f, 0.0f, 50.0f));
    //创建一个实体
    Qt3DCore::QEntity *j10Entity = new Qt3DCore::QEntity(j9Entity);
    j10Entity->addComponent(j10mesh);
    j10Entity->addComponent(j10material);
    j10Entity->addComponent(j10transform);

    // ! j11
    Qt3DRender::QMesh *j11mesh = new Qt3DRender::QMesh();//Mesh
    j11mesh->setSource(QUrl("qrc:/arm/j11.obj"));
    j11mesh->setMeshName(tr("j11"));
    qDebug() << j11mesh->status() << j11mesh->source() << endl;
    //Material
    Qt3DExtras::QPhongMaterial *j11material = new Qt3DExtras::QPhongMaterial();
    j11material->setDiffuse(QColor(QRgb(0xbeb32b)));
    //Mesh Transform
    Qt3DCore::QTransform *j11transform = new Qt3DCore::QTransform();
    j11transform->setScale(1.0f);
    j11transform->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(0.0f, 1.0f, 0.0f), 0.0f));
    j11transform->setTranslation(QVector3D(140.0f, 0.0f, 50.0f));
    //创建一个实体
    Qt3DCore::QEntity *j11Entity = new Qt3DCore::QEntity(j10Entity);
    j11Entity->addComponent(j11mesh);
    j11Entity->addComponent(j11material);
    j11Entity->addComponent(j11transform);

    // Set root object of the scene
    view->setRootEntity(rootEntity);
}

  1. 效果如下
    在这里插入图片描述
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
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 添加到场景中,最终显示出模型。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值