From fe305c49aa3eb0314d5c116430c8b49477cb7c9f Mon Sep 17 00:00:00 2001 From: Linloir <3145078758@qq.com> Date: Mon, 19 Dec 2022 00:42:38 +0800 Subject: [PATCH] [CORE][ADD] Add model from model selector - Add slot API in sceneviewer - Add connection in editor page widget --- FinalProject/editorpage.cpp | 3 +++ FinalProject/sceneviewer.cpp | 30 ++++++++++++++++++++---------- FinalProject/sceneviewer.h | 3 +++ 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/FinalProject/editorpage.cpp b/FinalProject/editorpage.cpp index a10bc68..fc720af 100644 --- a/FinalProject/editorpage.cpp +++ b/FinalProject/editorpage.cpp @@ -49,6 +49,9 @@ EditorPage::EditorPage(QWidget* parent) : _sceneViewer->show(); _mainLayout->addWidget(_sceneViewerContainer); _sceneViewerContainer->show(); + + // Connect signals + connect(_modelSelector, &ModelSelector::onObjectSelected, _sceneViewer, &SceneViewer::addObject); } EditorPage::~EditorPage() {} diff --git a/FinalProject/sceneviewer.cpp b/FinalProject/sceneviewer.cpp index edcaec6..c16781a 100644 --- a/FinalProject/sceneviewer.cpp +++ b/FinalProject/sceneviewer.cpp @@ -137,16 +137,16 @@ void SceneViewer::initializeGL() { _dirLight = new DirLight(); - Model* model = new Model("E:\\Repositories\\CollegeProjects\\CGAssignments\\FinalProject\\Models\\backpack\\backpack.obj"); - Renderable* backpack = new Renderable(model); - backpack->move(glm::vec3(-5.0f, -2.0f, -2.0f)); - backpack->updateBoundary(); - _objects.push_back(backpack); - - Renderable* backpack2 = new Renderable(model); - backpack2->makeLight(); - backpack2->originalLight()->setIdealDistance(500); - _objects.push_back(backpack2); + //Model* model = new Model("E:\\Repositories\\CollegeProjects\\CGAssignments\\FinalProject\\Models\\backpack\\backpack.obj"); + //Renderable* backpack = new Renderable(model); + //backpack->move(glm::vec3(-5.0f, -2.0f, -2.0f)); + //backpack->updateBoundary(); + //_objects.push_back(backpack); + // + //Renderable* backpack2 = new Renderable(model); + //backpack2->makeLight(); + //backpack2->originalLight()->setIdealDistance(500); + //_objects.push_back(backpack2); // Test Code End _camera.setPosition(glm::vec3(0.0f, 0.0f, 10.0f)); @@ -481,3 +481,13 @@ void SceneViewer::moveOperatingObject(const Ray& ray) { _operatingObject->setPosition(_hitRecord.position()); } } + +void SceneViewer::addObject(Model* model) { + makeCurrent(); + Model* newModel = model->copyToCurrentContext(); + Renderable* newObject = new Renderable(newModel); + _selectedObject = newObject; + _operatingObject = newObject; + _objects.push_back(newObject); + parentWidget()->update(); +} diff --git a/FinalProject/sceneviewer.h b/FinalProject/sceneviewer.h index 362cf95..1c0b855 100644 --- a/FinalProject/sceneviewer.h +++ b/FinalProject/sceneviewer.h @@ -69,6 +69,9 @@ private: void rotateCamera(QMouseEvent* event); void moveOperatingObject(const Ray& ray); +public: + void addObject(Model* model); + protected: // OpenGL functions virtual void initializeGL() override;