[TEST] Bounding Box Test

This commit is contained in:
Linloir 2022-12-18 20:05:25 +08:00
parent 7321455581
commit 947cd9b445
No known key found for this signature in database
GPG Key ID: 58EEB209A0F2C366
2 changed files with 26 additions and 6 deletions

View File

@ -31,10 +31,12 @@ SceneViewer::SceneViewer(QWidget* parent)
} }
// Copy the shaders to the temp folder // Copy the shaders to the temp folder
extractShaderResorce("vertexshader.glsl"); extractShaderResource("vertexshader.glsl");
extractShaderResorce("fragmentshader.glsl"); extractShaderResource("fragmentshader.glsl");
extractShaderResorce("skyboxvertexshader.glsl"); extractShaderResource("skyboxvertexshader.glsl");
extractShaderResorce("skyboxfragmentshader.glsl"); extractShaderResource("skyboxfragmentshader.glsl");
extractShaderResource("boundfragmentshader.glsl");
extractShaderResource("boundvertexshader.glsl");
} }
SceneViewer::~SceneViewer() { 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 shaderResourcePath = ":/shaders/" + shaderName;
QString shaderTempPath = "./temp/shaders/" + shaderName; QString shaderTempPath = "./temp/shaders/" + shaderName;
@ -107,6 +109,15 @@ void SceneViewer::initializeGL() {
vertexShader.dispose(); vertexShader.dispose();
fragmentShader.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(); _skyShader.ensureInitialized();
Logger::info("Sky Shader initialized"); Logger::info("Sky Shader initialized");
@ -185,6 +196,14 @@ void SceneViewer::paintGL() {
_shaderProgram.unbind(); _shaderProgram.unbind();
if (_hoveredObject != nullptr) {
_boundShader.bind();
_boundShader.setUniform("view", view);
_boundShader.setUniform("projection", projection);
_hoveredObject->boundary().render();
_boundShader.unbind();
}
_skyShader.bind(); _skyShader.bind();
_skyShader.setUniform("view", glm::mat4(glm::mat3(view))); _skyShader.setUniform("view", glm::mat4(glm::mat3(view)));
_skyShader.setUniform("projection", projection); _skyShader.setUniform("projection", projection);

View File

@ -27,6 +27,7 @@ private:
DirLight* _dirLight = nullptr; DirLight* _dirLight = nullptr;
// Shader program for objects // Shader program for objects
ShaderProgram _shaderProgram = ShaderProgram::empty(); ShaderProgram _shaderProgram = ShaderProgram::empty();
ShaderProgram _boundShader = ShaderProgram::empty();
ShaderProgram _skyShader = ShaderProgram::empty(); ShaderProgram _skyShader = ShaderProgram::empty();
SkyBox* _sky; SkyBox* _sky;
// Main camera // Main camera
@ -55,7 +56,7 @@ public:
~SceneViewer(); ~SceneViewer();
private: private:
void extractShaderResorce(const QString& shaderName); void extractShaderResource(const QString& shaderName);
void hitTest(const Ray& ray); void hitTest(const Ray& ray);
protected: protected: