내 Qt3D
장면에서 3D 객체는 공간적 위치에 따라 표시되지 않습니다. 마지막으로 생성 된 QEntity
은 카메라 회전 방법에 관계없이 항상 포 그라운드에 있습니다. 예를 들어 QEntity
redBigSphere
은 카메라 설정에 지정된 기본보기의 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를 처음 사용하므로 답변을 고려해보십시오. (저의 낮은 평판으로 인해 이미지 링크 만 제공 할 수 있습니다.)