Qt Quick 提供了强大的 3D 功能支持,主要通过 Qt 3D 模块实现。以下是 QML 中开发 3D 应用的全面指南。
1. 基本配置
环境要求
-
Qt 5.10 或更高版本(推荐 Qt 6.x)
-
启用 Qt 3D 模块
-
支持 OpenGL 的硬件
项目配置
在 .pro
文件中添加:
QT += 3dcore 3drender 3dinput 3dextras 3dquick
2. 核心组件
基本结构
qml
import Qt3D.Core 2.15
import Qt3D.Render 2.15
import Qt3D.Extras 2.15Entity {id: sceneRootcomponents: [RenderSettings {activeFrameGraph: ForwardRenderer {clearColor: "black"camera: camera}}]// 相机配置Camera {id: cameraposition: Qt.vector3d(0, 0, 10)viewCenter: Qt.vector3d(0, 0, 0)}// 3D内容放在这里FirstPersonCameraController { camera: camera }
}
常用属性
核心组件属性
Entity (Qt3D.Core)
属性/方法 | 类型 | 说明 |
---|
components | list<Component3D> | 实体包含的组件列表 |
enabled | bool | 是否启用实体(默认true) |
parent | Entity | 父实体(用于构建场景层次) |
Transform (Qt3D.Core)
属性/方法 | 类型 | 说明 |
---|
translation | vector3d | 位置坐标(x,y,z) |
rotation | quaternion | 四元数旋转 |
rotationX | real | X轴旋转角度(度) |
rotationY | real | Y轴旋转角度(度) |
rotationZ | real | Z轴旋转角度(度) |
scale | real | 统一缩放因子 |
scale3D | vector3d | 各轴独立缩放(x,y,z) |
渲染相关
Camera (Qt3D.Render)
属性/方法 | 类型 | 说明 |
---|
position | vector3d | 相机位置 |
viewCenter | vector3d | 观察中心点 |
upVector | vector3d | 相机的上向量(默认0,1,0) |
fieldOfView | real | 视野角度(度) |
nearPlane | real | 近裁剪面距离 |
farPlane | real | 远裁剪面距离 |
projectionType | enum | 投影类型(Orthographic/Perspective) |
aspectRatio | real | 宽高比(自动计算) |
Material (Qt3D.Extras)
属性/方法 | 类型 | 说明 |
---|
ambient | color | 环境光颜色 |
diffuse | color | 漫反射颜色 |
specular | color | 镜面反射颜色 |
shininess | real | 高光强度(0-100) |
alpha | real | 透明度(0-1) |
几何体属性
通用Mesh属性 (Qt3D.Extras)
属性/方法 | 类型 | 说明 |
---|
radius | real | 球体/环体的半径 |
length | real | 立方体长度 |
width | real | 立方体宽度 |
height | real | 立方体高度 |
rings | int | 球体经线分段数 |
slices | int | 球体纬线分段数 |
光源属性
通用Light属性 (Qt3D.Render)
属性/方法 | 类型 | 说明 |
---|
color | color | 光源颜色 |
intensity | real | 光照强度 |
enabled | bool | 是否启用光源 |
PointLight特有
属性/方法 | 类型 | 说明 |
---|
constantAttenuation | real | 恒定衰减 |
linearAttenuation | real | 线性衰减 |
quadraticAttenuation | real | 二次衰减 |
常用方法
SceneLoader (Qt3D.Core)
方法 | 参数 | 说明 |
---|
setSource | url | 加载3D模型文件 |