Qt例子学习笔记 - Examples/Qt-6.2.0/qt3d/controlsunderlay

2024-04-13 14:48

本文主要是介绍Qt例子学习笔记 - Examples/Qt-6.2.0/qt3d/controlsunderlay,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

main.cpp

#include <QGuiApplication>
#include <QQuickView>
#include <Qt3DRender/qt3drender-config.h>int main(int argc, char **argv)
{//QSurfaceFormat格式包括颜色缓冲区的大小,红色、绿色和蓝色;//alpha 缓冲区的大小;//深度和模板缓冲区的大小;//以及用于多重采样的每个像素的样本数。//此外,该格式还包含表面配置参数,例如用于渲染的 //OpenGL 配置文件和版本、是否启用立体缓冲区以及交换行为。QSurfaceFormat format;format.setSamples(4);QSurfaceFormat::setDefaultFormat(format);
#if !QT_CONFIG(qt3d_rhi_renderer)qputenv("QSG_RHI_BACKEND", "opengl");
#endifQGuiApplication app(argc, argv);//QQuickView 类提供了一个用于显示 Qt Quick 用户界面的窗口QQuickView view;view.resize(520, 500);//此枚举指定如何调整视图大小。//QQuickView::SizeRootObjectToView//视图将自动将根项目的大小调整为视图的大小。view.setResizeMode(QQuickView::SizeRootObjectToView);view.setSource(QUrl("qrc:/main.qml"));view.show();return app.exec();
}

main.qml

import QtQuick 2.14
import QtQuick.Scene3D 2.14
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.2Item {id: mainproperty real rotationValue: 0//与 GridLayout 相同,但只有一列ColumnLayout {id: colorLayoutanchors.left: parent.horizontalCenteranchors.leftMargin: parent.width * 0.25anchors.right: parent.rightanchors.rightMargin: 15anchors.top: scene3D.topspacing: 5Text { text: "Appearance"; font.bold: true }Text { text: "Ambient color RGB" }RowLayout {Text { text: "R" }Slider {id: color_rLayout.fillWidth: truefrom: 0to: 255value: 128}}RowLayout {Text { text: "G" }Slider {id: color_gLayout.fillWidth: truefrom: 0to: 255value: 195}}RowLayout {Text { text: "B" }Slider {id: color_bLayout.fillWidth: truefrom: 0to: 255value: 66}}Text { text: "Shininess" }Slider {id: shiningLayout.fillWidth: truefrom: 30to: 90value: 50}}ColumnLayout {id: transformLayoutanchors.left: colorLayout.leftanchors.right: colorLayout.rightanchors.top: colorLayout.bottomanchors.topMargin: 10spacing: 5Text { text: "Item transform"; font.bold: true }Text { text: "Rotation" }RowLayout {Text { text: "X" }Slider {id: rotation_xLayout.fillWidth: truefrom: -45to: 45value: rotationValue}}RowLayout {Text { text: "Y" }Slider {id: rotation_yLayout.fillWidth: truefrom: -45to: 45value: rotationValue}}RowLayout {Text { text: "Z" }Slider {id: rotation_zLayout.fillWidth: truefrom: -45to: 45value: rotationValue}}RowLayout {CheckBox {id: animation; text: "Animation"; checked: false}}}ColumnLayout {id: cameraLayoutanchors.left: colorLayout.leftanchors.right: colorLayout.rightanchors.top: transformLayout.bottomanchors.topMargin: 10spacing: 5Text { text: "Camera"; font.bold: true }Text { text: "View Ctr Z: " + watch.cameraZ.toFixed(2) }Slider {id: viewCenter_zLayout.fillWidth: truefrom: 4to: 12value: 7.5onValueChanged: watch.setPositionZ(value)}Button {id: viewAllLayout.fillWidth: truetext: "View All"onClicked: watch.viewLogo()}}// 在 QML 文件中的位置和 Scene3D 的大小//在Underlay模式下没有实际效果:// 3D 内容将在任何 QtQuick 内容之前绘制// 并假设一个全屏视口Scene3D {id: scene3Dfocus: trueaspects: "input"//适用于使用 FBO 可能过于占用资源的全屏 3D 场景。//Scene3D 表现为 QtQuick 底图。//请注意,使用此模式时,Scene3D 的大小及其变换将被忽略,渲染将占据整个屏幕。//QML 文件中 Scene3D 的位置也不会有任何影响。//Qt 3D 内容将在任何 Qt Quick 内容之前绘制。//必须注意不要通过重叠 Qt Quick 内容来过度绘制和隐藏 Qt 3D 内容。//此外,使用此模式时,窗口 clearBeforeRendering 将自动设置为 false。compositingMode: Scene3D.UnderlayLogo {id: watch}}SequentialAnimation {running: truepaused: !animation.checkedloops: Animation.InfiniteNumberAnimation {target: mainproperty: "rotationValue"easing.type: Easing.OutQuadduration: 1000from: 0to: 45}NumberAnimation {target: mainproperty: "rotationValue"easing.type: Easing.InOutQuadduration: 1000from: 45to: -45}NumberAnimation {target: mainproperty: "rotationValue"easing.type: Easing.InQuadduration: 1000from: -45to: 0}}
}

Logo.qml

import Qt3D.Core 2.0
import Qt3D.Render 2.0
import QtQuick 2.0
import Qt3D.Extras 2.0//实体本身是空的。
//Entity 对象的行为由它引用的 Component3D 对象定义。
//每个 Qt3D 后端方面都能够通过识别实体由哪些组件组成来解释和处理实体。
//一个方面可能决定只处理由单个 Transform 组件组成的实体,
//而另一个方面可能专注于 MouseHandler。Entity {id: sceneRootreadonly property double cameraZ: camera.position.z//旋转和移动相机,使其 viewCenter 成为场景边界体积的中心,并且整个场景适合视口。//注意:仅当镜头处于透视或正交投影模式时才有效。function viewAll() {camera.viewAll()}//旋转并移动相机,使其 viewCenter 成为实体边界体积的中心,并且整个实体适合视口。//注意:仅当镜头处于透视或正交投影模式时才有效。function viewLogo() {camera.viewEntity(logoEntity)}function setPositionZ(z) {camera.position = Qt.vector3d( 0.0, 0.0, z )}//定义将渲染场景的视点。Camera {id: cameraprojectionType: CameraLens.PerspectiveProjectionfieldOfView: 40aspectRatio: 4/3nearPlane : 0.1farPlane : 1000.0position: Qt.vector3d( 0.0, 0.0, 7.5 )upVector: Qt.vector3d( 0.0, 1.0, 0.0 )viewCenter: Qt.vector3d( 0.0, 0.0, 0.0 )}//RenderSettings 类型保存与渲染过程相关的设置并托管活动的 FrameGraph。components: [RenderSettings {activeFrameGraph: ForwardRenderer {camera: cameraclearColor: "white"}//保存当前的渲染策略。//Qt3DRender::QRenderSettings::OnDemand//FrameGraph 仅在发生变化时呈现。renderPolicy: RenderSettings.OnDemand}]PhongMaterial {id: materialdiffuse: Qt.rgba( color_r.value/255, color_g.value/255, color_b.value/255, 1.0 )ambient: Qt.rgba( 0.1, 0.1, 0.1, 1.0 )shininess: shining.value}Transform {id: logoTransformrotation: fromEulerAngles( rotation_x.value, rotation_y.value, rotation_z.value )}Mesh {id: logoMeshsource: "Qt_logo.obj"}Entity {id: logoEntitycomponents: [ logoMesh, material, logoTransform ]}//以由 Qt3DCore::QEntity 实例聚合为组件的场景节点的基类//Qt3DCore::QComponent 提供了一个垂直的行为切片,//可以分配给 Qt3DCore::QEntity 实例,有时也可以在它们之间共享。//Qt3DCore::QComponent 子类通常聚合成组,将有用的行为传递给聚合实体。//例如,要拥有一个由 Qt3D 渲染器方面绘制的实体,一个实体很可能会聚合 //Qt3DCore::QTransform、Qt3DRender::QMesh 和 Qt3DRender::QMaterial 组件。Entity {components: [PointLight {color: "white"intensity: 0.6},Transform {translation: Qt.vector3d(0, 0, 10)}]}
}

这篇关于Qt例子学习笔记 - Examples/Qt-6.2.0/qt3d/controlsunderlay的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/900435

相关文章

QT Creator配置Kit的实现示例

《QTCreator配置Kit的实现示例》本文主要介绍了使用Qt5.12.12与VS2022时,因MSVC编译器版本不匹配及WindowsSDK缺失导致配置错误的问题解决,感兴趣的可以了解一下... 目录0、背景:qt5.12.12+vs2022一、症状:二、原因:(可以跳过,直奔后面的解决方法)三、解决方

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

python中update()函数的用法和一些例子

《python中update()函数的用法和一些例子》update()方法是字典对象的方法,用于将一个字典中的键值对更新到另一个字典中,:本文主要介绍python中update()函数的用法和一些... 目录前言用法注意事项示例示例 1: 使用另一个字典来更新示例 2: 使用可迭代对象来更新示例 3: 使用

python连接sqlite3简单用法完整例子

《python连接sqlite3简单用法完整例子》SQLite3是一个内置的Python模块,可以通过Python的标准库轻松地使用,无需进行额外安装和配置,:本文主要介绍python连接sqli... 目录1. 连接到数据库2. 创建游标对象3. 创建表4. 插入数据5. 查询数据6. 更新数据7. 删除

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Qt中实现多线程导出数据功能的四种方式小结

《Qt中实现多线程导出数据功能的四种方式小结》在以往的项目开发中,在很多地方用到了多线程,本文将记录下在Qt开发中用到的多线程技术实现方法,以导出指定范围的数字到txt文件为例,展示多线程不同的实现方... 目录前言导出文件的示例工具类QThreadQObject的moveToThread方法实现多线程QC

Qt使用QSqlDatabase连接MySQL实现增删改查功能

《Qt使用QSqlDatabase连接MySQL实现增删改查功能》这篇文章主要为大家详细介绍了Qt如何使用QSqlDatabase连接MySQL实现增删改查功能,文中的示例代码讲解详细,感兴趣的小伙伴... 目录一、创建数据表二、连接mysql数据库三、封装成一个完整的轻量级 ORM 风格类3.1 表结构

Qt QCustomPlot库简介(最新推荐)

《QtQCustomPlot库简介(最新推荐)》QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计,它具有轻量级、实时处理百万级数据和多图层支持等特点,适用于科学计算、... 目录核心特性概览核心组件解析1.绘图核心 (QCustomPlot类)2.数据容器 (QCPDataC

Qt如何实现文本编辑器光标高亮技术

《Qt如何实现文本编辑器光标高亮技术》这篇文章主要为大家详细介绍了Qt如何实现文本编辑器光标高亮技术,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录实现代码函数作用概述代码详解 + 注释使用 QTextEdit 的高亮技术(重点)总结用到的关键技术点应用场景举例示例优化建议

Qt 设置软件版本信息的实现

《Qt设置软件版本信息的实现》本文介绍了Qt项目中设置版本信息的三种常用方法,包括.pro文件和version.rc配置、CMakeLists.txt与version.h.in结合,具有一定的参考... 目录在运行程序期间设置版本信息可以参考VS在 QT 中设置软件版本信息的几种方法方法一:通过 .pro