news 2026/6/12 10:51:52

Qt 3D 实战|三维场景搭建、三维模型加载与显示

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Qt 3D 实战|三维场景搭建、三维模型加载与显示

一、Qt 3D 简介

Qt 3D 是 Qt 官方三维图形框架,分为C++ APIQML API,基于 OpenGL 渲染,支持:

  • 基础 3D 场景、相机、光源、材质
  • 加载.obj.mtl等通用三维模型
  • 模型旋转、平移、缩放、视角交互
  • 适合工业仿真、可视化、虚拟展示、嵌入式 3D 界面

模块依赖

  • qmake(.pro)

pro

QT += 3dcore 3drender 3dinput 3dextras
  • CMake

cmake

find_package(Qt6 REQUIRED COMPONENTS 3DCore 3DRender 3DInput 3DExtras) target_link_libraries(App PRIVATE Qt6::3DCore Qt6::3DRender Qt6::3DInput Qt6::3DExtras)

推荐优先使用QML + Qt 3D,开发效率更高、交互更流畅。


二、Qt 3D 核心四大组件

  1. 场景根节点 (Entity):所有 3D 对象的父容器
  2. 相机 (Camera):观察者视角,控制视野、远近、位置
  3. 光源 (Light):环境光、方向光、点光源,决定模型明暗
  4. 渲染 / 材质 (Material):模型表面颜色、纹理、反光

三、示例 1:基础 3D 几何体(立方体 / 球体)

qml

import QtQuick 2.15 import QtQuick.Window 2.15 import Qt3D.Core 2.15 import Qt3D.Render 2.15 import Qt3D.Input 2.15 import Qt3D.Extras 2.15 Window { width: 800 height: 600 visible: true title: "Qt3D 基础几何体" // 3D 场景视图 View3D { anchors.fill: parent // 轨道相机:支持鼠标拖拽旋转、滚轮缩放 OrbitCameraController { camera: mainCamera } // 场景根实体 Entity { // 相机 PerspectiveCamera { id: mainCamera position: Qt.vector3D(0, 0, 10) fieldOfView: 45 nearPlane: 0.1 farPlane: 1000 } // 方向光源 DirectionalLight { worldDirection: Qt.vector3D(-1, -1, -1) intensity: 1.0 } // 立方体模型 Entity { CuboidMesh {} PhongMaterial { diffuse: "skyblue" } Transform { translation: Qt.vector3D(-2, 0, 0) } } // 球体模型 Entity { SphereMesh { radius: 1.5 } PhongMaterial { diffuse: "orange" } Transform { translation: Qt.vector3D(2, 0, 0) } } } } }

操作说明

  • 鼠标左键拖拽:旋转视角
  • 鼠标滚轮:缩放远近
  • 鼠标右键拖拽:平移场景

四、示例 2:加载外部 3D 模型(OBJ 格式)

工业 / 可视化常用格式为OBJ + MTL,Qt 3D 原生支持。

1. 模型文件说明

model.objmodel.mtl、贴图文件放入 Qt 资源qrc

2. QML 加载模型代码

qml

import QtQuick 2.15 import QtQuick.Window 2.15 import Qt3D.Core 2.15 import Qt3D.Render 2.15 import Qt3D.Input 2.15 import Qt3D.Extras 2.15 Window { width: 800 height: 600 visible: true View3D { anchors.fill: parent OrbitCameraController { camera: cam } Entity { PerspectiveCamera { id: cam position: Qt.vector3D(0, 3, 8) } DirectionalLight { worldDirection: Qt.vector3D(0, -1, -1) intensity: 1.2 } // 加载外部 OBJ 模型 Entity { id: objModel // 模型网格 Mesh { source: "qrc:/3d/model.obj" } // 位置、旋转、缩放 Transform { translation: Qt.vector3D(0, 0, 0) scale: 1.0 } } } } }

五、模型动态控制(旋转 / 平移)

结合属性动画实现模型自动旋转:

qml

// 在模型 Entity 内添加 Transform { id: modelTrans rotation: fromAxisAndAngle(Qt.vector3D(0,1,0), 0) PropertyAnimation on rotation { loops: Animation.Infinite duration: 10000 from: fromAxisAndAngle(Qt.vector3D(0,1,0), 0) to: fromAxisAndAngle(Qt.vector3D(0,1,0), 360) } }

六、常见问题与优化

  1. 模型黑屏 / 看不见
    • 相机位置过近 / 过远,调整camera.position
    • 缺少光源,必须添加DirectionalLight/PointLight
  2. 模型加载失败
    • 路径错误、OBJ/MTL 文件损坏、贴图路径不匹配
  3. 卡顿、帧率低
    • 简化模型面数,嵌入式设备慎用高精度模型
    • 关闭多余光源、降低渲染采样
  4. 不支持 FBX 格式Qt3D 原生不支持 FBX,先用 3D 建模软件转为 OBJ。

小结

Qt 3D 开发流程:搭建 View3D + 相机 + 光源 → 内置几何体 / 外部 OBJ 模型 → 材质与变换 → 交互与动画。QML 版本上手简单,适合快速做 3D 可视化界面。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 10:51:51

基于 Android 家庭医务助手系统设计与实现

摘 要 科技进步、生活水平提升,人们越发关注家庭医疗健康管理。老龄化加剧,慢性病患者增多,工作忙碌的家庭成员无暇周全照料老人与病患。而传统医疗模式在便捷、及时、个性化服务方面短板明显,难以契合家庭日常医疗需求。因此&am…

作者头像 李华
网站建设 2026/6/12 10:51:51

如何免费重置JetBrains IDE试用期?3个简单方法让你开发不中断

如何免费重置JetBrains IDE试用期?3个简单方法让你开发不中断 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 还在为IDE试用期到期而烦恼吗?😫 每次倒计时归零,你的…

作者头像 李华
网站建设 2026/6/12 10:49:06

3步搞定视频字幕提取:本地AI工具让字幕制作效率提升800%

3步搞定视频字幕提取:本地AI工具让字幕制作效率提升800% 【免费下载链接】video-subtitle-extractor 视频硬字幕提取,生成srt文件。无需申请第三方API,本地实现文本识别。基于深度学习的视频字幕提取框架,包含字幕区域检测、字幕内…

作者头像 李华