Qt3D渲染的基本问题

问题描述

我有一个简单的Qt3D代码来测试API。

#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();
}

此图像代表样本中的场景。

Scene

  • 首先,将摄像机和球体都放置在Vector(0,0)
  • 相机每帧向+ Y方向移动。
  • 相机将始终面对球体,并且球体将始终位于屏幕中间。我以为setViewCenter(position_of_sphere)函数可以达到此规格。

我有2个问题。

  1. Qt3D是否使用左手坐标系?我的形象对吗?
  2. 运行上面的代码时,得到了这个动画。

Result of the sample code

我不确定为什么球体会朝右方向移动,而不是放在屏幕中间。


更新

我在Windows 10环境下测试了示例代码,并获得了我期望的准确结果。感谢您的评论,弗洛里安! 看来,此问题仅在MacOSX中引起(确切为10.15)。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)