QT3D学习笔记——圆台、圆锥

类名作用
Qt3DWindow3D渲染窗口容器
QEntity场景中的实体(对象或容器)
QCamera控制观察视角
QPointLight点光源
QConeMesh圆锥几何网格
QTransform控制实体的位置/旋转/缩放
QPhongMaterialPhong光照材质(定义颜色、反光等)
QFirstPersonCameraController第一人称相机控制器(WASD+鼠标控制)

Qt3DWindow(3D 窗口)

├─ RootEntity (QEntity 根实体)
│   ├─ Camera (QCamera 相机)
│   │   ├─ Lens (镜头:透视投影参数)
│   │   └─ Controller (控制器:WASD+鼠标控制)
│   │
│   ├─ Light (光源)
│   │   ├─ QPointLight(点光源:颜色/强度)
│   │   └─ QTransform (变换:光源位置)

│   │
│   └─ Cone (3d 圆锥实体)

│       ├─ QConeMesh (网格:几何图形)

│       ├─ QPhongMaterial (材质:颜色/反光)
│       └─ QTransform (变换:位置/旋转)

│   
└─ FrameGraph (渲染管线:背景色/渲染设置)

//#include "mainwindow.h"//#include "FrustumWidget.h"
#include <QApplication>
#include <QtCore/QObject>
#include <QGuiApplication>#include <Qt3DRender/qcamera.h>
#include <Qt3DCore/qentity.h>
#include <Qt3DRender/qcameralens.h>#include <QtWidgets/QApplication>
#include <QtWidgets/QWidget>
#include <QtWidgets/QHBoxLayout>
#include <QtWidgets/QCheckBox>
#include <QtWidgets/QCommandLinkButton>
#include <QtGui/QScreen>#include <Qt3DInput/QInputAspect>#include <Qt3DExtras/qtorusmesh.h>
#include <Qt3DRender/qmesh.h>
#include <Qt3DRender/qtechnique.h>
#include <Qt3DRender/qmaterial.h>
#include <Qt3DRender/qeffect.h>
#include <Qt3DRender/qtexture.h>
#include <Qt3DRender/qrenderpass.h>
#include <Qt3DRender/qsceneloader.h>
#include <Qt3DRender/qpointlight.h>#include <Qt3DCore/qtransform.h>
#include <Qt3DCore/qaspectengine.h>#include <Qt3DRender/qrenderaspect.h>
#include <Qt3DExtras/qforwardrenderer.h>#include <Qt3DExtras/qt3dwindow.h>
#include <Qt3DExtras/qfirstpersoncameracontroller.h>
#include <Qt3DExtras/QPhongMaterial>
#include <Qt3DExtras/QConeMesh>
#include <QText2DEntity>
// 创建坐标轴线
Qt3DCore::QEntity* createAxisLine(Qt3DCore::QEntity* parent,const QVector3D& start,const QVector3D& end,const QColor& color) {Qt3DCore::QEntity* axis = new Qt3DCore::QEntity(parent);// 顶点数据QByteArray vertexData;vertexData.resize(2 * 3 * sizeof(float)); // 2 points xyzfloat* ptr = reinterpret_cast<float*>(vertexData.data());*ptr++ = start.x(); *ptr++ = start.y(); *ptr++ = start.z();*ptr++ = end.x();   *ptr++ = end.y();   *ptr++ = end.z();// 几何体Qt3DCore::QGeometry* geometry = new Qt3DCore::QGeometry(axis);Qt3DCore::QBuffer* vertexBuffer = new Qt3DCore::QBuffer(geometry);vertexBuffer->setData(vertexData);Qt3DCore::QAttribute* positionAttr = new Qt3DCore::QAttribute(vertexBuffer,  // 直接传递缓冲区,不传递geometryQt3DCore::QAttribute::defaultPositionAttributeName(),Qt3DCore::QAttribute::Float,3,  // 每个顶点的分量数(xyz=3)2   // 顶点数量(起点+终点=2));geometry->addAttribute(positionAttr);  // 手动添加到geometry// 渲染器Qt3DRender::QGeometryRenderer* line = new Qt3DRender::QGeometryRenderer(axis);line->setGeometry(geometry);line->setPrimitiveType(Qt3DRender::QGeometryRenderer::Lines);// 材质Qt3DExtras::QPhongMaterial* material = new Qt3DExtras::QPhongMaterial(axis);material->setDiffuse(color);material->setAmbient(color);axis->addComponent(line);axis->addComponent(material);return axis;
}// 添加坐标轴标签(需要Qt3DExtras模块)
void addAxisLabel(Qt3DCore::QEntity* parent,const QString& text,const QVector3D& position) {Qt3DExtras::QText2DEntity* label = new Qt3DExtras::QText2DEntity(parent);label->setText(text);label->setColor(Qt::black);label->setHeight(20);label->setWidth(30);Qt3DCore::QTransform* transform = new Qt3DCore::QTransform(label);transform->setTranslation(position);label->addComponent(transform);
}
int main(int argc, char *argv[])
{QApplication a(argc, argv);//MainWindow w;//w.show();Qt3DExtras::Qt3DWindow *view = new Qt3DExtras::Qt3DWindow();//3D的渲染窗口,提供3D场景的显示容器view->defaultFrameGraph()->setClearColor(QColor(Qt::black));//设置视图背景色QWidget *widget = QWidget::createWindowContainer(view);QSize screenSize = view->screen()->size();widget->setMinimumSize(QSize(200, 100));widget->setMaximumSize(screenSize);widget->setWindowTitle(QStringLiteral("Basic shapes"));//3D中的基本实体类,代表场景中的一个对象或容器。Qt3DCore::QEntity *rootEntity = new Qt3DCore::QEntity();view->setRootEntity(rootEntity);//管理输入设备的抽象层,启用输入处理(如鼠标、键盘事件)Qt3DInput::QInputAspect *input = new Qt3DInput::QInputAspect;view->registerAspect(input);//控制3D场景的观察视角Qt3DRender::QCamera *cameraEntity = view->camera();cameraEntity->lens()->setPerspectiveProjection(45.0f, 16.0f / 9.0f, 0.1f, 1000.0f);cameraEntity->setUpVector(QVector3D(0, 1, 0));//定义相机的“向上”方向(通常为Y轴 (0,1,0))。cameraEntity->setPosition(QVector3D(0, 10.0f, 10.0f));//视点:观察者所处的位置。cameraEntity->setViewCenter(QVector3D(0, 0, 0));//观察目标点//高光控制Qt3DCore::QEntity *lightEntity = new Qt3DCore::QEntity(rootEntity);//点光源组件Qt3DRender::QPointLight *light = new Qt3DRender::QPointLight(lightEntity);light->setColor("white");light->setIntensity(1);lightEntity->addComponent(light);//定义3d实体的位置/旋转/缩放Qt3DCore::QTransform *lightTransform = new Qt3DCore::QTransform(lightEntity);lightTransform->setTranslation(cameraEntity->position());lightEntity->addComponent(lightTransform);//启用第一人称相机控制(通过WASD和鼠标移动相机)Qt3DExtras::QFirstPersonCameraController *camController = new Qt3DExtras::QFirstPersonCameraController(rootEntity);camController->setCamera(cameraEntity);// 第一个圆锥(底部圆锥)Qt3DCore::QEntity *m_coneEntity = new Qt3DCore::QEntity(rootEntity);Qt3DExtras::QConeMesh *cone = new Qt3DExtras::QConeMesh();cone->setTopRadius(0.5);cone->setBottomRadius(0.5);cone->setLength(1);  // 高度为1cone->setRings(50);cone->setSlices(20);Qt3DCore::QTransform *coneTransform = new Qt3DCore::QTransform();coneTransform->setScale(1.0);//coneTransform->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(1.0f, 0.0f, 0.0f), 45.0f));coneTransform->setTranslation(QVector3D(0.0f, 0.0f, 0.0f));  // 底部圆锥位于原点Qt3DExtras::QPhongMaterial *coneMaterial = new Qt3DExtras::QPhongMaterial();coneMaterial->setDiffuse(QColor(Qt::white));m_coneEntity->addComponent(cone);m_coneEntity->addComponent(coneMaterial);m_coneEntity->addComponent(coneTransform);// 第二个圆锥(顶部圆锥)Qt3DCore::QEntity *m_coneEntity1 = new Qt3DCore::QEntity(rootEntity);Qt3DExtras::QConeMesh *cone1 = new Qt3DExtras::QConeMesh();cone1->setTopRadius(0.5);cone1->setBottomRadius(0.5);cone1->setLength(1);  // 高度同样为1cone1->setRings(50);cone1->setSlices(20);Qt3DCore::QTransform *coneTransform1 = new Qt3DCore::QTransform();coneTransform1->setScale(1.0);//coneTransform1->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(1.0f, 0.0f, 0.0f), 45.0f));// 将第二个圆锥放在第一个圆锥的顶部// Y轴偏移 = 第一个圆锥的高度 + 第二个圆锥高度的一半(因为旋转后中心点在几何中心)coneTransform1->setTranslation(QVector3D(0.0f, 1.0f, 0.0f));Qt3DExtras::QPhongMaterial *coneMaterial1 = new Qt3DExtras::QPhongMaterial();coneMaterial1->setDiffuse(QColor(Qt::white));m_coneEntity1->addComponent(cone1);m_coneEntity1->addComponent(coneMaterial1);m_coneEntity1->addComponent(coneTransform1);widget->show();widget->resize(500, 500);return a.exec();
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/84371.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…

夏普比率(Sharpe ratio)​

具有投资常识的人都明白&#xff0c;投资光看收益是不够的&#xff0c;还要看承受的风险&#xff0c;也就是收益风险比。 夏普比率描述的正是这个概念&#xff0c;即每承受一单位的总风险&#xff0c;会产生多少超额的报酬。 用数学公式描述就是&#xff1a; 其中&#xff1…

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…

计算机网络备忘录

计算机网络 - 网络互联与互联网 计算机网络重点学习本章&#xff0c;属于核心知识 包含网络层和传输层 的 相关协议 计算机网络层次重点掌握网络层与传输层。其中网络层主要是IP协议&#xff0c;解决主机-主机通信&#xff0c;传输层主要是TCP/UDP 协议&#xff0c;解决应用-…

跨界破局者鲁力:用思辨与创新重塑汽车流通行业标杆

来源&#xff1a;投资家 在汽车流通行业深度变革的浪潮中&#xff0c;东莞东风南方汽车销售服务有限公司塘厦分公司总经理鲁力历经近二十年行业深耕&#xff0c;构建了一条从汽车销售顾问到区域运营掌舵者的进阶范本。作为东风日产体系内兼具理论建构与实战穿透力的标杆管理者…

玄机-日志分析-IIS日志分析

1.phpstudy-2018站点日志.(.log文件)所在路径&#xff0c;提供绝对路径 2.系统web日志中状态码为200请求的数量是多少 3.系统web日志中出现了多少种请求方法 4.存在文件上传漏洞的路径是什么(flag{/xxxxx/xxxxx/xxxxxx.xxx} 5.攻击者上传并且利用成功的webshell的文件名是什…

微信小程序开发知识点

1. 微信小程序开发知识点 1.1. 公共引用 1.1.1. 公共 wxss 在app.wxss文件下写入组件样式&#xff0c;也可使用import方式应用单独公共样式&#xff0c;避免了每个页面单独引用。 import "./public/wxss/base.wxss";1.1.2. 公共组件 在app.json文件下写入组件&…

安卓基础(编译.Class)

方法安全性维护性开源友好度删除.java用.class❌ 极低❌ 差❌代码混淆 (ProGuard)✅ 中等✅ 易✅AAR 库模块✅ 高✅ 易✅ 对于.class 步骤 1&#xff1a;编译生成 .class 文件 ​​打开终端​​&#xff08;Android Studio 底部的 Terminal 标签页&#xff09; 导航到你的模块…

golang常用库之-go-feature-flag库(特性开关(Feature Flags))

文章目录 golang常用库之-go-feature-flag库&#xff08;特性开关&#xff08;Feature Flags&#xff09;&#xff09;一、什么是特性开关&#xff08;Feature Flags&#xff09;二、go-feature-flag库我可以使用 GO Feature Flag 做什么&#xff1f;选择使用 Open Feature SDK…

微前端 - Module Federation使用完整示例

Angular 框架中 项目结构 main-app/src/app/app.module.tsapp.component.ts micro-app/src/app/app.module.tsapp.component.ts主应用配置 安装必要依赖&#xff1a; ng add angular-architects/module-federation修改 webpack.config.js&#xff1a; const { share, Shar…

麒麟v10系统的docker重大问题解决-不支持容器名称解析

今天给客户在麒麟v10Kylin-Server-V10-SP1下安装nextcloudonlyoffice的时候出现无法连接onlyoffice的问题,经过分析找到了是docker版本过低的原因,现在把解决思路和步骤分享给大家。 一、问题 用一键安装工具,给客户装好了系统,Nextcloud可以正常访问 但是访问nextcloud中的o…

PyCharm中运行.py脚本程序

1.最近在弄一个python脚本程序&#xff0c;记录下运行过程。 2.编写的python程序如下 # # Copyright 2017 Pixar # # Licensed under the terms set forth in the LICENSE.txt file available at # https://openusd.org/license. # # Check whether this script is being run …

学习资料搜集-ARMv8 cache 操作

【ARM64】【cache/MMU】学习总结_arm64 mmu-CSDN博客 [mmu/cache]-ARMV8的cache的维护指令介绍_data cache set allocation-CSDN博客 https://download.csdn.net/blog/column/12036969/139483584 验证码_哔哩哔哩 【ARM Cache 与 MMU 系列文章 2 -- Cache Coherence及内存顺…

Flutter快速上手,入门教程

目录 一、参考文档 二、准备工作 下载Flutter SDK&#xff1a; 配置环境 解决环境报错 zsh:command not found:flutter 执行【flutter doctor】测试效果 安装Xcode IOS环境 需要安装brew&#xff0c;通过brew安装CocoaPods. 复制命令行&#xff0c;打开终端 分别执行…

八股文——JVM

1. JVM组成 1.1 JVM由哪些部分组成&#xff1f;运行流程&#xff1f; Java Virtual Machine&#xff1a;Java 虚拟机&#xff0c;Java程序的运行环境&#xff08;java二进制字节码的运行环境&#xff09;好处&#xff1a;一次编写&#xff0c;到处运行&#xff1b;自动内存管理…

在Pnetlab6上绕过TPM、安全启动和 RAM 检查安装windows 11笔记

笔者本次安装的windows11的镜像为: zh-cn_windows_11_enterprise_ltsc_2024_x64_dvd_cff9cd2d.iso 1、创建镜像目录并上传iso文件 mkdir /opt/unetlab/addons/qemu/win-win11x64-2024-LTSC //目录名称务必按照官方文档格式,否则无法识别 目录创建完成后,将.iso格式镜像上…

PCL点云库入门(第18讲)——PCL库点云特征之3DSC特征描述3D shape context descriptor

一、3DSC&#xff08;3D Shape Context&#xff09;特征算法原理 1. 背景 3DSC 是一种描述三维点云局部形状的特征描述子&#xff0c;受二维 Shape Context 的启发。它用于捕捉点云某一点局部的几何分布信息&#xff0c;对点云配准、识别等任务非常有效。 2. 基本思想 3DSC…

SpringBoot+Mysql校园跑腿服务平台系统源码

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

分库分表的取舍

文章目录 大数据量下采用**水平分表**的缺点**1. 跨表查询复杂性与性能下降****2. 数据分布不均衡****3. 分布式事务与一致性问题****4. 扩展性受限****5. 查询条件限制与索引管理复杂****6. 数据迁移与维护成本高****7. 业务逻辑复杂度增加****总结** shardingJdbc分片策略**1…

Vue3解决“找不到模块@/components/xxx.vue或其相应的类型声明ts文件(2307)”

问题 1&#xff1a;如果没有这个env.d.ts文件&#xff0c;就新建 declare module "*.vue" {import { DefineComponent } from "vue";const component: DefineComponent<{}, {}, any>;export default component; }2&#xff1a;如果有tsconfig.json文…