From 947cd9b445aa4754982a1f2089a0dd8734f8f592 Mon Sep 17 00:00:00 2001 From: Linloir <3145078758@qq.com> Date: Sun, 18 Dec 2022 20:05:25 +0800 Subject: [PATCH] [TEST] Bounding Box Test --- FinalProject/sceneviewer.cpp | 29 ++++++++++++++++++++++++----- FinalProject/sceneviewer.h | 3 ++- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/FinalProject/sceneviewer.cpp b/FinalProject/sceneviewer.cpp index 77e58d7..145bce4 100644 --- a/FinalProject/sceneviewer.cpp +++ b/FinalProject/sceneviewer.cpp @@ -31,10 +31,12 @@ SceneViewer::SceneViewer(QWidget* parent) } // Copy the shaders to the temp folder - extractShaderResorce("vertexshader.glsl"); - extractShaderResorce("fragmentshader.glsl"); - extractShaderResorce("skyboxvertexshader.glsl"); - extractShaderResorce("skyboxfragmentshader.glsl"); + extractShaderResource("vertexshader.glsl"); + extractShaderResource("fragmentshader.glsl"); + extractShaderResource("skyboxvertexshader.glsl"); + extractShaderResource("skyboxfragmentshader.glsl"); + extractShaderResource("boundfragmentshader.glsl"); + extractShaderResource("boundvertexshader.glsl"); } SceneViewer::~SceneViewer() { @@ -47,7 +49,7 @@ SceneViewer::~SceneViewer() { } } -void SceneViewer::extractShaderResorce(const QString& shaderName) { +void SceneViewer::extractShaderResource(const QString& shaderName) { QString shaderResourcePath = ":/shaders/" + shaderName; QString shaderTempPath = "./temp/shaders/" + shaderName; @@ -107,6 +109,15 @@ void SceneViewer::initializeGL() { vertexShader.dispose(); fragmentShader.dispose(); + _boundShader.ensureInitialized(); + Logger::info("Bound Shader initialized"); + VertexShader boundVertexShader("./temp/shaders/boundvertexshader.glsl"); + FragmentShader boundFragmentShader("./temp/shaders/boundfragmentshader.glsl"); + _boundShader.attachShader(boundVertexShader); + _boundShader.attachShader(boundFragmentShader); + boundVertexShader.dispose(); + boundFragmentShader.dispose(); + _skyShader.ensureInitialized(); Logger::info("Sky Shader initialized"); @@ -184,6 +195,14 @@ void SceneViewer::paintGL() { } _shaderProgram.unbind(); + + if (_hoveredObject != nullptr) { + _boundShader.bind(); + _boundShader.setUniform("view", view); + _boundShader.setUniform("projection", projection); + _hoveredObject->boundary().render(); + _boundShader.unbind(); + } _skyShader.bind(); _skyShader.setUniform("view", glm::mat4(glm::mat3(view))); diff --git a/FinalProject/sceneviewer.h b/FinalProject/sceneviewer.h index 99e9f37..c434a22 100644 --- a/FinalProject/sceneviewer.h +++ b/FinalProject/sceneviewer.h @@ -27,6 +27,7 @@ private: DirLight* _dirLight = nullptr; // Shader program for objects ShaderProgram _shaderProgram = ShaderProgram::empty(); + ShaderProgram _boundShader = ShaderProgram::empty(); ShaderProgram _skyShader = ShaderProgram::empty(); SkyBox* _sky; // Main camera @@ -55,7 +56,7 @@ public: ~SceneViewer(); private: - void extractShaderResorce(const QString& shaderName); + void extractShaderResource(const QString& shaderName); void hitTest(const Ray& ray); protected: