当前位置: 首页 > news >正文

QML中的3D功能--入门开发

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)
属性/方法类型说明
componentslist<Component3D>实体包含的组件列表
enabledbool是否启用实体(默认true)
parentEntity父实体(用于构建场景层次)
Transform (Qt3D.Core)
属性/方法类型说明
translationvector3d位置坐标(x,y,z)
rotationquaternion四元数旋转
rotationXrealX轴旋转角度(度)
rotationYrealY轴旋转角度(度)
rotationZrealZ轴旋转角度(度)
scalereal统一缩放因子
scale3Dvector3d各轴独立缩放(x,y,z)

渲染相关

Camera (Qt3D.Render)
属性/方法类型说明
positionvector3d相机位置
viewCentervector3d观察中心点
upVectorvector3d相机的上向量(默认0,1,0)
fieldOfViewreal视野角度(度)
nearPlanereal近裁剪面距离
farPlanereal远裁剪面距离
projectionTypeenum投影类型(Orthographic/Perspective)
aspectRatioreal宽高比(自动计算)
Material (Qt3D.Extras)
属性/方法类型说明
ambientcolor环境光颜色
diffusecolor漫反射颜色
specularcolor镜面反射颜色
shininessreal高光强度(0-100)
alphareal透明度(0-1)

几何体属性

通用Mesh属性 (Qt3D.Extras)
属性/方法类型说明
radiusreal球体/环体的半径
lengthreal立方体长度
widthreal立方体宽度
heightreal立方体高度
ringsint球体经线分段数
slicesint球体纬线分段数

光源属性

通用Light属性 (Qt3D.Render)
属性/方法类型说明
colorcolor光源颜色
intensityreal光照强度
enabledbool是否启用光源
PointLight特有
属性/方法类型说明
constantAttenuationreal恒定衰减
linearAttenuationreal线性衰减
quadraticAttenuationreal二次衰减

常用方法

SceneLoader (Qt3D.Core)
方法参数说明
setSourceurl加载3D模型文件

相关文章:

  • Doris 本地部署集群重启后报错
  • 可发1区的超级创新思路(python 、MATLAB实现):基于多尺度注意力TCN-KAN与小波变换的时间序列预测模型
  • 【信息获取能力】
  • DevOps 进阶指南:如何让工作流更丝滑?
  • 爬虫入门与requests库的使用——python爬虫
  • BMS电池管理芯片BQ76920芯片手册详细解读
  • 不带无线网卡的Linux开发板上网方法
  • 10-DevOps-Jenkins参数化构建实现多版本发布
  • 数据分析与挖掘
  • Python语法系列博客 · 第7期[特殊字符] 列表推导式与字典推导式:更优雅地处理数据结构
  • Flutter学习 滚动组件(2):ListView进阶使用
  • 如何防止接口被刷
  • Elasticsearch只返回指定的字段(用_source)
  • 数据可视化(Matplotlib和pyecharts)
  • 【Leetcode 每日一题】2563. 统计公平数对的数目
  • LeetCode 热题 100_乘积最大子数组(88_152_中等_C++)(动态规划)
  • rpcrt4!COMMON_AddressManager函数分析之和全局变量rpcrt4!AddressList的关系
  • 纯FPGA实现AD9361控制的思路和实现 UART实现AXI_MASTER
  • 《AI大模型应知应会100篇》第26篇:Chain-of-Thought:引导大模型进行步骤推理
  • 常见设计模式
  • 人民日报:各地扎实开展学习教育,一体推进学查改
  • 美伊就核问题在罗马开展第二轮间接谈判
  • “云南舞蹈大家跳”暨牟定“三月会”下周举行,城际公交免票
  • 长安汽车辟谣抛弃华为,重奖百万征集扩散不实内容的背后组织
  • 观察|美军在菲律宾部署新导弹,试图继续构建“导弹链”
  • 美政府公布1968年罗伯特·肯尼迪遇刺事件档案