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))才可以传递进去。
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");