问题描述
#include <QGuiApplication>
#include <Qt3DCore/QEntity>
#include <Qt3DRender/QCamera>
#include <Qt3DRender/QCameraLens>
#include <Qt3DCore/QTransform>
#include <Qt3DExtras/QphongMaterial>
#include <Qt3DExtras/QSphereMesh>
#include <Qt3DLogic/qframeAction>
#include "qt3dwindow.h"
Qt3DCore::QEntity *createScene()
{
// Root entity
Qt3DCore::QEntity *rootEntity = new Qt3DCore::QEntity;
// Sphere
Qt3DCore::QEntity *sphereEntity = new Qt3DCore::QEntity(rootEntity);
Qt3DExtras::QSphereMesh *sphereMesh = new Qt3DExtras::QSphereMesh;
sphereMesh->seTradius(3);
sphereMesh->setGenerateTangents(true);
Qt3DCore::QTransform *sphereTransform = new Qt3DCore::QTransform;
sphereTransform->setTranslation(QVector3D(0,0));
Qt3DRender::QMaterial *material = new Qt3DExtras::QphongMaterial(rootEntity);
sphereEntity->addComponent(sphereMesh);
sphereEntity->addComponent(sphereTransform);
sphereEntity->addComponent(material);
return rootEntity;
}
int main(int argc,char* argv[])
{
QGuiApplication app(argc,argv);
Qt3DExtras::Qt3DWindow view;
Qt3DCore::QEntity *scene = createScene();
// Camera
Qt3DRender::QCamera *camera = view.camera();
camera->lens()->setPerspectiveProjection(45.0f,16.0f/9.0f,0.1f,1000.0f);
camera->setPosition(QVector3D(0,0));
camera->setViewCenter(QVector3D(0,0));
// Loop
Qt3DLogic::qframeAction* loop = new Qt3DLogic::qframeAction();
QObject::connect(loop,&Qt3DLogic::qframeAction::triggered,[camera](float dt){
camera->setPosition(camera->position() + QVector3D(0,0.1,0));
});
scene->addComponent(loop);
view.setRootEntity(scene);
view.show();
return app.exec();
}
此图像代表样本中的场景。
- 首先,将摄像机和球体都放置在Vector(0,0)
- 相机每帧向+ Y方向移动。
- 相机将始终面对球体,并且球体将始终位于屏幕中间。我以为setViewCenter(position_of_sphere)函数可以达到此规格。
我有2个问题。
- Qt3D是否使用左手坐标系?我的形象对吗?
- 运行上面的代码时,得到了这个动画。
我不确定为什么球体会朝右方向移动,而不是放在屏幕中间。
更新
我在Windows 10环境下测试了示例代码,并获得了我期望的准确结果。感谢您的评论,弗洛里安! 看来,此问题仅在MacOSX中引起(确切为10.15)。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)