2016-12-09 1 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를 처음 사용하므로 답변을 고려해보십시오. (저의 낮은 평판으로 인해 이미지 링크 만 제공 할 수 있습니다.)

답변

관련 문제