基于Qt 5.9, Qt3DCore::QEntity 的实体加上旋转动画 请给出完整代码
时间: 2024-03-08 17:49:02 浏览: 110
好的,以下是一个基于 Qt 5.9 的完整示例代码,它创建了一个 Qt3DCore::QEntity 实体,然后给实体的变换组件添加了一个沿 Y 轴旋转的动画:
```
#include <Qt3DCore/QEntity>
#include <Qt3DCore/QTransform>
#include <Qt3DAnimation/QPropertyAnimation>
#include <Qt3DExtras/QSphereMesh>
#include <Qt3DExtras/QPhongMaterial>
#include <Qt3DExtras/Qt3DWindow>
#include <Qt3DRender/QCamera>
#include <Qt3DRender/QPointLight>
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// 创建 Qt3D 应用程序窗口
Qt3DExtras::Qt3DWindow *window = new Qt3DExtras::Qt3DWindow();
window->defaultFrameGraph()->setClearColor(QColor(QRgb(0x4d4d4f)));
// 创建实体
Qt3DCore::QEntity *entity = new Qt3DCore::QEntity();
// 创建网格组件
Qt3DExtras::QSphereMesh *mesh = new Qt3DExtras::QSphereMesh();
mesh->setRadius(1);
entity->addComponent(mesh);
// 创建材质组件
Qt3DExtras::QPhongMaterial *material = new Qt3DExtras::QPhongMaterial();
material->setDiffuse(QColor(QRgb(0xbeb32b)));
entity->addComponent(material);
// 创建变换组件
Qt3DCore::QTransform *transform = new Qt3DCore::QTransform();
entity->addComponent(transform);
// 创建旋转动画
QPropertyAnimation *animation = new QPropertyAnimation(transform, "rotation");
animation->setStartValue(QQuaternion::fromAxisAndAngle(QVector3D(0, 1, 0), 0));
animation->setEndValue(QQuaternion::fromAxisAndAngle(QVector3D(0, 1, 0), 360));
animation->setDuration(2000);
// 将动画添加到实体的组件列表中
entity->addComponent(animation);
// 创建相机
Qt3DRender::QCamera *camera = window->camera();
camera->setProjectionType(Qt3DRender::QCameraLens::PerspectiveProjection);
camera->setPosition(QVector3D(0, 0, 10));
camera->setViewCenter(QVector3D(0, 0, 0));
// 创建光源
Qt3DCore::QEntity *lightEntity = new Qt3DCore::QEntity();
Qt3DRender::QPointLight *light = new Qt3DRender::QPointLight(lightEntity);
light->setColor("white");
light->setIntensity(1);
lightEntity->addComponent(light);
lightEntity->addComponent(new Qt3DCore::QTransform);
lightEntity->transform()->setTranslation(QVector3D(0, 0, 10));
// 将实体和光源添加到场景根实体中
Qt3DCore::QEntity *rootEntity = new Qt3DCore::QEntity();
rootEntity->addChild(entity);
rootEntity->addChild(lightEntity);
window->setRootEntity(rootEntity);
// 显示窗口
window->show();
return app.exec();
}
```
需要注意的是,Qt 5.9 版本中的 Qt3D 模块与 Qt 5.15 版本中的略有不同,因此上述代码可能与 Qt 5.15 中的代码略有不同。但是,它们的主要思路是相同的。
阅读全文