0
点赞
收藏
分享

微信扫一扫

QT3D学习

哈哈镜6567 2022-05-05 阅读 66
qt3d

QT3D学习

概述:

Qt3D 采用游戏开发中的 ECS 构架。

游戏开发中的ECS 架构概述_钢与铁的博客-CSDN博客_ecs架构

ECS全称Entity-Component-System(实体-组件-系统),是基于组合优于继承(将不变的部分使用继承以方便复用, 将多变的部分用组合来方便拓展)的原则的一种模式,游戏中的每一个单元(怪物、相机等)都是一个实体,每个实体又是由一个或多个组件构成的,每个组件仅包含该组件需要关注的数据(例如技能组件保存技能伤害、范围),而系统则用来处理这些实体的集合,其只存逻辑,不存状态,类似于一个工具,例如技能系统会根据遍历到的每一个拥有技能组件的实体,根据状态执行技能。

功能学习

1:QMaterial 材质纹理

QT纹理贴图的使用

注意:

A:指定图片的路径时要用QUrl::fromLocalFile 转才可以,不能直接用QString,好像是编码的原因。

B:setDiffuse(const QVariant &diffuse),这个参数是QVariant类型的,要使用纹理QTextureLoader、QTexture2D等时,要使用QVariant::fromValue(TextureLoader)或QVariant::fromValue(qobject_cast<QObject*>(Texture2D))才可以传递进去。

QDiffuseSpecularMaterial diffuse texture | Qt ForumI eventually found this to work for me texture = new Qt3DRender::QTexture2D(); material = new Qt3DExtras::QDiffuseSpecularMaterial(); material->setAlphaBlendingEnabled(true); material->setAmbient(QColor(0xff,0xff,0xff,0x00)); // SymbolImage is my subclass...https://forum.qt.io/topic/106370/qdiffusespecularmaterial-diffuse-texture/6

 

2:天空盒 Qt3DExtras::QSkyboxEntity

注意两点:

A:setBaseName的文件路径的问题,要用QUrl::fromLocalFile转一下才可以,直接写QString不行,好像是编码的问题。

B:注意图片的名字后面要是以 _negx,_negy,_negz,_posx,_posy,_posz 这六个结尾才可以。box是图片名字的前面,"D:/SkyBox/box" 这个路径只是写了一半的图片名。

Qt3DExtras::QSkyboxEntity *Skybox = new Qt3DExtras::QSkyboxEntity(root);

Skybox->setBaseName(QUrl::fromLocalFile("D:/SkyBox/box").toString());

Skybox->setExtension(".jpg");

举报

相关推荐

0 条评论