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

发布时间:2026/6/12 10:52:01

Qt 3D 实战|三维场景搭建、三维模型加载与显示 一、Qt 3D 简介Qt 3D 是 Qt 官方三维图形框架分为C API和QML API基于 OpenGL 渲染支持基础 3D 场景、相机、光源、材质加载.obj、.mtl等通用三维模型模型旋转、平移、缩放、视角交互适合工业仿真、可视化、虚拟展示、嵌入式 3D 界面模块依赖qmake(.pro)proQT 3dcore 3drender 3dinput 3dextrasCMakecmakefind_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 核心四大组件场景根节点 (Entity)所有 3D 对象的父容器相机 (Camera)观察者视角控制视野、远近、位置光源 (Light)环境光、方向光、点光源决定模型明暗渲染 / 材质 (Material)模型表面颜色、纹理、反光三、示例 1基础 3D 几何体立方体 / 球体qmlimport 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 MTLQt 3D 原生支持。1. 模型文件说明将model.obj、model.mtl、贴图文件放入 Qt 资源qrc。2. QML 加载模型代码qmlimport 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) } }六、常见问题与优化模型黑屏 / 看不见相机位置过近 / 过远调整camera.position缺少光源必须添加DirectionalLight/PointLight模型加载失败路径错误、OBJ/MTL 文件损坏、贴图路径不匹配卡顿、帧率低简化模型面数嵌入式设备慎用高精度模型关闭多余光源、降低渲染采样不支持 FBX 格式Qt3D 原生不支持 FBX先用 3D 建模软件转为 OBJ。小结Qt 3D 开发流程搭建 View3D 相机 光源 → 内置几何体 / 外部 OBJ 模型 → 材质与变换 → 交互与动画。QML 版本上手简单适合快速做 3D 可视化界面。

相关新闻