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模型文件 |