Я пытаюсь реализовать сцену с несколькими окнами просмотра, используя следующий код.Некоторые строки могут не понадобиться для функциональной сцены, так как я новичок в такого рода реализации.Я смешал несколько предложений и не уверен, что это правильный способ сортировки необходимых вещей, которые мне нужны для моей 3D-сцены.
Когда я запускаю свой проект, он просто показывает черный экран и не уверен, что онэто уже сцена с несколькими окнами просмотра или еще один вид.Я думал, что, возможно, я не смогу связать один из окон просмотра с основным видом.В настоящее время я использую один вид, и он без проблем показывает 3D-сцену, но сейчас я хочу показать этот же вид только через один из 4 портов и проверить несколько камер для поддержки оставшихся видов..
Спасибо!
MyView3D::MyView3D(QWidget *parent)
: QWidget(parent){
this->view = new Qt3DExtras::Qt3DWindow();
this->view->defaultFrameGraph()->setClearColor(QColor(135,206,235));
this->container = QWidget::createWindowContainer(this->view);
this->screenSize = view->screen()->size();
this->container->setMinimumSize(QSize(200, 100));
this->container->setMaximumSize(screenSize);
this->container->resize(200, 100);
this->view->resize(200,100);
this->hLayout = new QHBoxLayout(this);
this->hLayout->addWidget(this->container, 1);
this->font = new QFont ("Courier New");
font->setPixelSize ( 11 );
this->logMessage = new QTextEdit;
this->logMessage->setReadOnly ( 1 );
this->logMessage->setLineWrapMode ( QTextEdit::NoWrap );
this->logMessage->setCurrentFont ( * font );
this->logMessage->setLineWrapColumnOrWidth ( 50 );
this->logMessage->setMinimumHeight ( 50 );
this->input = new Qt3DInput::QInputAspect;
this->view->registerAspect(this->input);
// Root entity
this->rootEntity = new Qt3DCore::QEntity();
this->frameGraph = new Qt3DRender::QFrameGraphNode();
this->techniqueFilter = new Qt3DRender::QTechniqueFilter();
Qt3DRender::QRenderSettings *activeFrameGraph = new Qt3DRender::QRenderSettings();
this ->viewport1 = new Qt3DRender::QViewport(techniqueFilter);
this->viewport2 = new Qt3DRender::QViewport(techniqueFilter);
this->viewport3 = new Qt3DRender::QViewport(techniqueFilter);
this->viewport4 = new Qt3DRender::QViewport(techniqueFilter);
viewport1->setNormalizedRect(QRectF(0, 0, 0.5, 0.5));
viewport2->setNormalizedRect(QRectF(0.5, 0, 0.5, 0.5));
viewport3->setNormalizedRect(QRectF(0, 0.5, 0.5, 0.5));
viewport4->setNormalizedRect(QRectF(0.5, 0.5, 0.5, 0.5));
//SET ACTIVE FRAME GRAPH NODE TO YOUR WINDOW
this->clearBuffer = new Qt3DRender::QClearBuffers(viewport1);
this->cameraSelector = new Qt3DRender::QCameraSelector(clearBuffer);
(void) new Qt3DRender::QRenderPassFilter(cameraSelector);
clearBuffer->setBuffers(Qt3DRender::QClearBuffers::ColorDepthBuffer);
// Camera
this->cameraEntity = this->view->camera();
this->cameraEntity->lens()->setPerspectiveProjection(45.0f, 16.0f/9.0f, 0.1f, 1000.0f);
this->cameraEntity->setPosition(QVector3D(-7, -3, 1.0f));
this->cameraEntity->setUpVector(QVector3D(0, 0, 1)); // defines z-direction
this->cameraEntity->setViewCenter(QVector3D(10, 0, 0));
Qt3DRender::QRenderSurfaceSelector *surfaceSelector = new Qt3DRender::QRenderSurfaceSelector;
cameraSelector->setCamera(this->cameraEntity);
this->view->setActiveFrameGraph(frameGraph);
m_dummySurface = new QOffscreenSurface;
m_dummySurface->setParent(this);
m_dummySurface->create();
surfaceSelector->setSurface(view);