1

シーンで、Qt3D3D オブジェクトが空間位置に従って表示されません。QEntityカメラをどのように回転させても、最後に作成されたものは常に前景にあります。私の例では、カメラ設定で指定されたデフォルトのビューでQEntity redBigSphere空間的に後ろに配置されていても、 は常に前景にあります。smallGreenSphere

main.cpp:

#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常にフォアグラウンドになります。

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

(結果の画像: http://imgur.com/a/fygTU )

インスタンス化の順序に関係なく、正しい 3D ビューを取得するにはどうすればよいですか?

私はQtとQt3Dが初めてなので、回答でこれを考慮してください。(私の評判が低いため、画像へのリンクのみを提供できます。)

4

1 に答える 1

0

私は 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今では私にとってはうまくいきます。

于 2017-01-03T08:02:08.933 に答える