首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么上一次创建的Qt3DCore::QEntity总是在我的场景视图的前台?

为什么上一次创建的Qt3DCore::QEntity总是在我的场景视图的前台?
EN

Stack Overflow用户
提问于 2016-12-09 15:06:15
回答 1查看 409关注 0票数 1

在我的Qt3D场景中,我的三维物体没有按照它们的空间定位来显示。上一次创建的QEntity总是在前台,不管我如何旋转相机。在我的示例中,QEntity redBigSphere始终位于前台,尽管它在摄像机设置中指定的默认视图中位于smallGreenSphere之后。

main.cpp

代码语言:javascript
复制
#include <QGuiApplication>
#include <Qt3DCore>
#include <Qt3DRender>
#include <Qt3DExtras>

Qt3DCore::QEntity* createTestScene() {

  Qt3DCore::QEntity* root = new Qt3DCore::QEntity;
  Qt3DCore::QEntity* smallGreenSphere = new Qt3DCore::QEntity(root);
  Qt3DCore::QEntity* redBigSphere = new Qt3DCore::QEntity(root);

  Qt3DExtras::QSphereMesh* bigMesh = new Qt3DExtras::QSphereMesh;
  bigMesh->setRadius(5);
  bigMesh->setRings(100);
  bigMesh->setSlices(20);

  Qt3DExtras::QSphereMesh* smallMesh = new Qt3DExtras::QSphereMesh;
  smallMesh->setRadius(2);
  smallMesh->setRings(100);
  smallMesh->setSlices(20);

  Qt3DExtras::QPhongMaterial* redMaterial = new Qt3DExtras::QPhongMaterial;
  redMaterial->setSpecular(Qt::white);
  redMaterial->setShininess(10);
  redMaterial->setAmbient(Qt::red);

  Qt3DExtras::QPhongMaterial* greenMaterial = new Qt3DExtras::QPhongMaterial;
  greenMaterial->setSpecular(Qt::white);
  greenMaterial->setShininess(10);
  greenMaterial->setAmbient(Qt::green);

  Qt3DCore::QTransform* transform =  new Qt3DCore::QTransform;
  transform->setTranslation(QVector3D(0,0,10));

  redBigSphere->addComponent(redMaterial);
  redBigSphere->addComponent(bigMesh);

  smallGreenSphere->addComponent(greenMaterial);
  smallGreenSphere->addComponent(smallMesh);
  smallGreenSphere->addComponent(transform);

  return root;
}


int main(int argc, char* argv[]) {

  QGuiApplication app(argc, argv);
  Qt3DExtras::Qt3DWindow view;
  Qt3DCore::QEntity* scene = createTestScene();

  // camera
  Qt3DRender::QCamera *camera = view.camera();
  camera->lens()->setPerspectiveProjection(45, 16./9., 0.1,1000.);
  camera->setPosition(QVector3D(30., 0, 60.));
  camera->setViewCenter(QVector3D(0, 0, 0));

  // manipulator
  Qt3DExtras::QOrbitCameraController* manipulator = new Qt3DExtras::QOrbitCameraController(scene);
  manipulator->setLinearSpeed(50);
  manipulator->setLookSpeed(180);
  manipulator->setCamera(camera);

view.setRootEntity(scene);

view.show();

return app.exec();
}

(结果图片:http://imgur.com/a/A7tIW)

如果我交换实例化的顺序,smallGreenSphere总是在前台。

代码语言:javascript
复制
Qt3DCore::QEntity* redBigSphere = new Qt3DCore::QEntity(root);
Qt3DCore::QEntity* smallGreenSphere = new Qt3DCore::QEntity(root);

(结果图片:http://imgur.com/a/fygTU)

无论实例化的顺序如何,如何获得正确的3D视图?

我是Qt和Qt3D的新手,所以请在你的回答中考虑这一点。(由于声誉不高,我只能提供到图片的链接。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-03 08:02:08

我在Qt论坛上更详细地发布了这个问题,人们可以在那里复制它。https://forum.qt.io/topic/74419/a-weird-bug-why-is-there-no-spatial-depth-in-my-3d-scene/24

这个问题似乎与Qt5.7.0有着特定的联系。但是,对于Qt5.7.1,它现在对我来说很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41063319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档