Qt3D模块使用

这篇具有很好参考价值的文章主要介绍了Qt3D模块使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Qt3D 模块的使用

在Qt中显示一个简易的立方体,效果如下
Qt3D模块使用

实现原理

1.根据Qt3D的框架,在Qt3D中 所有的类都是以QNode节点作为基础节点;Qt3D框架中,提供了实体(QEntity)和
组件(QComponent )的概念,3D场景中实体有个根实体,在初始化view时,需要给view
(Qt3DExtras::Qt3DWindow)对象设置根实体;后续加载到场景中的实体(QEntity)为根实体的子节点,从而构
成一棵实体树。
2.实体和组件:一个实体又多个组件构成,比如我们立方体实体是由立方体网格(mesh),立方体材质(Material)
以及立方体的位置 三个组件构成了立方体实体。

实现代码

1.Qt官方提供的Qt3d 的实例较少,QWidget的实例更少,通过以下两个函数就能加载一个3D场景到一个QWidget的布局器中
2.初始化3D的场景,一般为固定代码

void Qt3DCubePane::init3D()
{
	//step1  创建一个3d 得view
	Qt3DExtras::Qt3DWindow* view = new Qt3DExtras::Qt3DWindow();
	//此颜色设置view的背景色,内部即glClearColor()的颜色
	view->defaultFrameGraph()->setClearColor(QColor(QRgb(0x4d4d4f)));
	//如果要将 3DWidnow 嵌入到widget中,需要一个widget来装它
	QWidget* container = QWidget::createWindowContainer(view);
	QSize screenSize = view->screen()->size();
	container->setMinimumSize(QSize(200, 100));
	container->setMaximumSize(screenSize);
	ui->horizontalLayout_2->addWidget(container);

	//创建一个跟实体
	dPtr->mRootEntity = new Qt3DCore::QEntity;

	//相机相关的属性控制
	Qt3DRender::QCamera* camEntity = view->camera();
	camEntity->lens()->setPerspectiveProjection(45.0f, 16.0f / 9.0f, 0.1f, 1000.0f);
	camEntity->setPosition(QVector3D(0, 0, 10.0f));
	camEntity->setUpVector(QVector3D(0, 1, 0));
	camEntity->setViewCenter(QVector3D(0, 0, 0));
	//加一个Camera的 轨道控制器 
	Qt3DExtras::QOrbitCameraController *camController = new Qt3DExtras::QOrbitCameraController(dPtr->mRootEntity);
	camController->setCamera(camEntity);

	//创建一个点光源
	Qt3DCore::QEntity *lightEntity = new Qt3DCore::QEntity(dPtr->mRootEntity);
	Qt3DRender::QPointLight *light = new Qt3DRender::QPointLight(lightEntity);
	light->setColor("white");
	light->setIntensity(1);
	lightEntity->addComponent(light);

	//将点光源 移动到 摄像机位置
	Qt3DCore::QTransform *lightTransform = new Qt3DCore::QTransform(lightEntity);
	lightTransform->setTranslation(camEntity->position());
	lightEntity->addComponent(lightTransform);
	view->setRootEntity(dPtr->mRootEntity);
}

3.构造立方体实体代码文章来源地址https://www.toymoban.com/news/detail-511761.html

void Qt3DCubePane::addTestGeoMesh()
{
	//添加一个TestMesh; Mesh 中有两个立方体,
	QEntity* ent1 = new QEntity(dPtr->mRootEntity);
	QEntity* ent2 = new QEntity(ent1);

	Qt3DExtras::QCuboidMesh* mesh1 = new Qt3DExtras::QCuboidMesh(ent1);
	Qt3DExtras::QPhongMaterial *material1 = new Qt3DExtras::QPhongMaterial();
	material1->setDiffuse(QColor("#FFFF00"));						//漫反射颜色
	material1->setShininess(0.0f);
	Qt3DCore::QTransform *objTransformMesh1 = new Qt3DCore::QTransform();
	objTransformMesh1->setTranslation(QVector3D(-4.0f, 0.0f, 0.0f));
	//objTransformMesh1->setRotationX(45.0f);

	ent1->addComponent(mesh1);
	ent1->addComponent(material1);
	ent1->addComponent(objTransformMesh1);


	Qt3DExtras::QPhongMaterial *material2 = new Qt3DExtras::QPhongMaterial();
	material2->setShininess(0.0f);
	material2->setDiffuse(QColor("#FF0000"));						//漫反射颜色
	Qt3DExtras::QCuboidMesh* mesh2 = new Qt3DExtras::QCuboidMesh();
	Qt3DCore::QTransform *objTransformMesh = new Qt3DCore::QTransform();
	objTransformMesh->setTranslation(QVector3D(4.0f, 0.0f, 0.0f));
	//objTransformMesh->setRotationX(45.0f);

	ent2->addComponent(mesh2);
	ent2->addComponent(objTransformMesh);
	ent2->addComponent(material2);
}

到了这里,关于Qt3D模块使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ❤️创意网页:使用CSS和HTML创建令人惊叹的3D立方体

    ✨ 博主: 命运之光   🌸 专栏: Python星辰秘典 🐳 专栏: web开发(简单好用又好看) ❤️ 专栏: Java经典程序设计 ☀️ 博主的其他文章: 点击进入博主的主页 前言: 欢迎踏入我的Web项目专栏,一段神奇而令人陶醉的数字世界! 🌌 在这里,我将带您穿越时空,揭开属于

    2024年02月12日
    浏览(46)
  • 使用html+css制作一个发光立方体特效

    使用html+css制作一个发光立方体特效

    2024年03月14日
    浏览(74)
  • Qt 制作一个简易的计算器

    1.通过UI界面封装出计算器的大致模型 进入设计页面后,左侧会有各种控件,可以将他们拖拽到你想编辑的窗口中,我们要做的是计算器,所以只用到很少几个控件,我们最主要用到Push Button这个控件来做我们计算器的按钮,lineEdit显示数字,我们可以将它拖拽到窗口,然后就

    2024年02月05日
    浏览(127)
  • OpenGLES:3D立方体纹理贴图

    前几篇博文讲解了OpenGLES绘制多种3D图形,并赋予丰富的色彩,但是在这些3D图形绘制过程中,有一点还没有涉及,就是 纹理贴图。 今天这篇博文我会用如下 六张图片 对立方体进行纹理贴图,实现 六个面都是贴图 的3D旋转立方体 2.1 常规变量定义 2.2 顶点、纹理相关变量定义

    2024年02月08日
    浏览(42)
  • 【Qt 一个简易画板的实现(Graphics View)】

    Qt专栏 Qt 学习之路(32): 一个简易画板的实现(Graphics View) 这一次将介绍如何使用 Graphics View 来实现前面所说的画板。前面说了很多有关 Graphics View的好话,但是没有具体的实例很难说究竟好在哪里。现在我们就把前面的内容使用 Graphics View 重新实现一下,大家可以对比一下看有

    2024年02月16日
    浏览(46)
  • 【VTK】读取一个 STL 文件,并使用 Qt 显示出来,在 Windows 上使用 Visual Studio 配合 Qt 构建 VTK

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 直接先把效果放出来,有需要就往下看。 骷髅3D打印3D模型

    2024年02月14日
    浏览(70)
  • css3实现3D立方体旋转特效源码

    CSS3自动旋转正方体3D特效是一款基于css3 keyframes属性制作的图片相册自动旋转立方体特效 css3实现3D立方体旋转特效代码

    2024年04月09日
    浏览(53)
  • 用QT/C++写一个简易文本编辑器

    学习QT的小练习,先看一下目前实现的效果。   功能: 编辑文本保存为txt。 打开一个txt文本文件,可编辑可保存。 文本编辑功能:剪切,复制,粘贴,加粗,斜体,下划线,设置颜色,字体。 要点: QT Designer的UI可视化设计:基本控件布局,资源导入,菜单动作,信号槽的

    2024年02月05日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包