2016-12-09 8 views
0

私のQt3Dシーンでは、私の3Dオブジェクトは空間的な配置に応じて表示されません。最後に作成されたQEntityは、どのようにカメラを回転させるかに関係なく、常にフォアグラウンドになります。 私の例では、QEntityredBigSphereはカメラ設定で指定されたデフォルトビューでsmallGreenSphereの後ろに空間的に配置されていても、常にフォアグラウンドになります。最後に作成されたQt3DCore :: QEntityは常に自分のシーンビューの前景にありますか?

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の新機能ですので、あなたの回答でこれを考慮してください。 (私の評判が低いため、画像へのリンクのみを提供できます)

答えて

関連する問題