Thinking in Qt —— 项目开发最佳实践(三)

经常有淘宝客户咨询 Qt 3d 相关的问题

但其实,不同行业咨询的 Qt 3d 问题是大相径庭的

今天想专门谈一下这类问题


 

场景一:机械/工业可视化 —— “我要看清它怎么动”

演示:

代码说明:

这是 Qt 官方 demo RobotArm,演示了 QtQuick3D 的能力

典型需求:

客户发来一个 .fbx 或 .gltf 格式的模型(比如机械臂、AGV小车、或者一套流水线设备)。

需求通常是:

  1. 加载模型并显示。

  2. 鼠标控制旋转、平移、缩放。

  3. 核心交互:能够控制模型中的某个“子部件”(如机械臂的关节)进行旋转或平移。

  4. 需要绚丽的材质和灯光效果。

误区:

很多开发者第一反应是去啃 Qt3D (C++ 模块) 或者直接撸原生 OpenGL。前者文档晦涩学习曲线极陡,后者开发效率太低。

最佳实践:Qt Quick 3D + QWidget 嵌入

对于偏重“展示”和“动画”的场景,Qt Quick 3D 是目前的版本之子。它拥有基于物理的渲染(PBR),且处理层级结构(Node hierarchy)非常容易。


 

场景二:测绘与感知 —— “我要看见海量数据”

演示1:

代码下载:

https://thinkinginqt.com/20251125_thinkinginqt/testVTK1.zip

代码说明:

用的是 VTK9.0、Qt5 和 VisualStudio,只提供了 release 版本

没有用 CMake,用的是老的 .pro 工程,因为是 2020 年的工程

在 QtCreator 编译时记得把 shadow build 的 √ 取消掉

演示2:

代码下载:

https://thinkinginqt.com/20251125_thinkinginqt/testVTK2.zip

代码说明:

用的是 VTK8.2、Qt5 和 VisualStudio,只提供了 release 版本

是 2022 年的时候淘宝客户提供的代码,主要功能就是加载 STL 文件

主要亮点就是制作了 vtk.pri,让 *.pro 文件变得更干净

在 QtCreator 编译时记得把 shadow build 的 √ 取消掉

典型需求:

客户是做激光雷达(LiDAR)、毫米波雷达或者深度相机的。

需求通常是:

  1. 实时接收传感器数据。

  2. 渲染百万级甚至千万级的点云(Point Cloud)。

  3. 对点云进行着色(根据高度或强度)。

  4. 三维重建(如人脸识别、SLAM 室内建模)。

误区:

Qt Quick 3D 或原生的 QScatterSeries 在处理海量点时性能会迅速崩溃。这些引擎是为少量的 Mesh(网格)设计的,而不是为海量的 Points(离散点)设计的。

最佳实践:VTK (Visualization Toolkit) + QWidget

VTK 是科学可视化领域的霸主。在处理科学数据、标量场、矢量场以及点云数据上,它是标准答案。


 

场景三:CAE/CAD/CAM —— “我要计算它的物理特性”

演示:1

代码下载:

https://thinkinginqt.com/20251125_thinkinginqt/testOCC.zip

代码说明:

D:/vcpkg 通过 .\vcpkg.exe install opencascade[vtk]

项目来源 https://github.com/Open-Cascade-SAS/OCCT/tree/master/samples/qt/Tutorial

github 里的代码是 Qt5 的,我把它升级优化到 Qt6.9 了

典型需求:

这是最硬核的领域。客户做船舶设计、有限元分析(FEA)、或者数控加工路径生成。

需求通常是:

  1. 加载 STEP/IGES 等工业标准 CAD 格式。

  2. 模型不仅仅是“看”的,更是“算”的(需要精确的布尔运算、剖切、倒角)。

  3. 网格剖分(Meshing):将几何体切割成四面体或六面体网格用于仿真计算。

  4. 交互式选点、选边、选面。

误区:

前两种方案在这里完全失效。因为它们只有“皮囊”(显示网格),没有“灵魂”(拓扑结构和几何参数)。你无法在 Qt Quick 3D 里对一个圆柱体进行精确的“打孔”运算。

最佳实践:OpenCascade (OCC) + QWidget

OpenCascade 是开源界唯一的工业级 CAD 内核。它负责“几何”与“拓扑”。


 

总结与决策建议

维度方案一:Qt Quick 3D方案二:VTK方案三:OCC
核心关键词展示、动画、UI数据、点云、重建几何、仿真、结构
典型行业智能家居、机械控制面板、大屏展示自动驾驶、医疗影像、地理测绘船舶设计、建筑结构、有限元分析
数据来源设计师给的 FBX/GLTF传感器给的 raw data (xyz)工程师给的 STP/IGES
几何能力弱(只有网格,无几何参数)中(主要处理离散数据)(包含精确拓扑和参数)
开发难度⭐⭐ (QML 很容易上手)⭐⭐⭐⭐ (Pipeline 机制复杂)⭐⭐⭐⭐⭐ (数学要求极高)