Qt通过OBJ文件渲染3D场景

Qt通过OBJ文件渲染3D场景

一、包含Qt3D模块

在pro文件中添加3dextras,告诉Qt编译器在构建项目时需要包含Qt 3D Extras模块。

QT += core gui 3dextras

二、渲染场景中一些必要的组件

//包含组件的头文件
#include <Qt3DRender/Qt3DRender>
#include <Qt3DExtras/Qt3DExtras>

// 创建一个新的3D窗口
Qt3DExtras::Qt3DWindow *view = new Qt3DExtras::Qt3DWindow();

// 创建一个QWidget,并将Qt3DWindow嵌入,使得可以像管理QWidget一样管理Qt3DWindow
QWidget *container = QWidget::createWindowContainer(view);

// 创建一个根实体,用作场景图的根节点
Qt3DCore::QEntity *scene_root = new Qt3DCore::QEntity();

// 创建一个实体,用于加载场景,作为根实体的子实体
Qt3DCore::QEntity *scene_loader_entity = new Qt3DCore::QEntity(scene_root);

// 实例化一个场景加载器,用于加载3D内容到scene_loader_entity
Qt3DRender::QSceneLoader *scene_loader = new Qt3DRender::QSceneLoader(scene_loader_entity);

// 创建一个轨道相机控制器,用于管理用户通过鼠标和键盘与场景的交互
QOrbitCameraController *camera_controller = new QOrbitCameraController(scene_root);


view->setRootEntity(scene_root);  // 设置视图的根实体为scene_root
view->defaultFrameGraph()->setClearColor(QColor(220, 220, 220));  // 设置3D场景背景色
scene_loader_entity->addComponent(scene_loader);  // 将scene_loader组件添加到scene_loader_entity实体

// 相机及其控制器配置
camera_controller->setCamera(view->camera());
view->camera()->setProjectionType(Qt3DRender::QCameraLens::PerspectiveProjection);  // 设置相机的投影类型为透视投影

三、将container添加到布局中

ui->container_layout->addWidget(container);

四、加载OBJ

scene_loader->setSource(QUrl::fromLocalFile(file_name));

通过scene_loader加载的OBJ,会自动解析mtl文件并贴图,只需要将mtl及用到的图片文件放在OBJ统一目录下即可。

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值