From 957713cda7f28ec7839348240b17f3180e227bc2 Mon Sep 17 00:00:00 2001
From: Linloir <3145078758@qq.com>
Date: Sun, 18 Dec 2022 10:49:07 +0800
Subject: [PATCH] [CORE][CHG] SkyBox Test
---
FinalProject/FinalProject.vcxproj | 6 ++++++
FinalProject/FinalProject.vcxproj.filters | 18 ++++++++++++++++++
FinalProject/mainwindow.qrc | 4 ++++
FinalProject/sceneviewer.cpp | 20 ++++++++++++++++++++
FinalProject/sceneviewer.h | 2 +-
FinalProject/skybox.cpp | 15 +++++++--------
FinalProject/skybox.h | 10 +++++-----
FinalProject/skyboxfragmentshader.glsl | 11 +++++++++++
FinalProject/skyboxvertexshader.glsl | 15 +++++++++++++++
FinalProject/terrainfragmentshader.glsl | 13 +++++++++++++
FinalProject/terrainvertexshader.glsl | 22 ++++++++++++++++++++++
{skybox => SkyBoxes}/back.jpg | Bin
{skybox => SkyBoxes}/bottom.jpg | Bin
{skybox => SkyBoxes}/front.jpg | Bin
{skybox => SkyBoxes}/left.jpg | Bin
{skybox => SkyBoxes}/right.jpg | Bin
{skybox => SkyBoxes}/top.jpg | Bin
17 files changed, 122 insertions(+), 14 deletions(-)
create mode 100644 FinalProject/skyboxfragmentshader.glsl
create mode 100644 FinalProject/skyboxvertexshader.glsl
create mode 100644 FinalProject/terrainfragmentshader.glsl
create mode 100644 FinalProject/terrainvertexshader.glsl
rename {skybox => SkyBoxes}/back.jpg (100%)
rename {skybox => SkyBoxes}/bottom.jpg (100%)
rename {skybox => SkyBoxes}/front.jpg (100%)
rename {skybox => SkyBoxes}/left.jpg (100%)
rename {skybox => SkyBoxes}/right.jpg (100%)
rename {skybox => SkyBoxes}/top.jpg (100%)
diff --git a/FinalProject/FinalProject.vcxproj b/FinalProject/FinalProject.vcxproj
index 17070a7..e72bef0 100644
--- a/FinalProject/FinalProject.vcxproj
+++ b/FinalProject/FinalProject.vcxproj
@@ -125,6 +125,7 @@
+
@@ -153,6 +154,7 @@
+
@@ -172,6 +174,10 @@
+
+
+
+
diff --git a/FinalProject/FinalProject.vcxproj.filters b/FinalProject/FinalProject.vcxproj.filters
index 8ca5770..345923c 100644
--- a/FinalProject/FinalProject.vcxproj.filters
+++ b/FinalProject/FinalProject.vcxproj.filters
@@ -168,6 +168,9 @@
Source Files\OpenGL Abstractions
+
+ Source Files\OpenGL Abstractions
+
@@ -212,6 +215,9 @@
Header Files\OpenGL Abstractions
+
+ Header Files\OpenGL Abstractions
+
@@ -264,5 +270,17 @@
Resource Files
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
\ No newline at end of file
diff --git a/FinalProject/mainwindow.qrc b/FinalProject/mainwindow.qrc
index 81e5d7b..b2b86e7 100644
--- a/FinalProject/mainwindow.qrc
+++ b/FinalProject/mainwindow.qrc
@@ -2,6 +2,10 @@
fragmentshader.glsl
vertexshader.glsl
+ skyboxvertexshader.glsl
+ terrainfragmentshader.glsl
+ terrainvertexshader.glsl
+ skyboxfragmentshader.glsl
font_awesome_6_regular_free.otf
diff --git a/FinalProject/sceneviewer.cpp b/FinalProject/sceneviewer.cpp
index 5ef2e92..5e5b4d6 100644
--- a/FinalProject/sceneviewer.cpp
+++ b/FinalProject/sceneviewer.cpp
@@ -31,6 +31,8 @@ SceneViewer::SceneViewer(QWidget* parent)
// Copy the shaders to the temp folder
extractShaderResorce("vertexshader.glsl");
extractShaderResorce("fragmentshader.glsl");
+ extractShaderResorce("skyboxvertexshader.glsl");
+ extractShaderResorce("skyboxfragmentshader.glsl");
}
SceneViewer::~SceneViewer() {
@@ -76,7 +78,19 @@ void SceneViewer::initializeGL() {
vertexShader.dispose();
fragmentShader.dispose();
+ _skyShader.ensureInitialized();
+ Logger::info("Sky Shader initialized");
+
+ VertexShader skyVertexShader("./temp/shaders/skyboxvertexshader.glsl");
+ FragmentShader skyFragmentShader("./temp/shaders/skyboxfragmentshader.glsl");
+ _skyShader.attachShader(skyVertexShader);
+ _skyShader.attachShader(skyFragmentShader);
+ skyVertexShader.dispose();
+ skyFragmentShader.dispose();
+
// Test Code Start
+ _sky = new SkyBox("E:\\Repositories\\CollegeProjects\\CGAssignments\\FinalProject\\SkyBoxes");
+
_dirLight = new DirLight();
Model* model = new Model("E:\\Repositories\\CollegeProjects\\CGAssignments\\FinalProject\\Models\\backpack\\backpack.obj");
@@ -140,6 +154,12 @@ void SceneViewer::paintGL() {
}
_shaderProgram.unbind();
+
+ _skyShader.bind();
+ _skyShader.setUniform("view", glm::mat4(glm::mat3(view)));
+ _skyShader.setUniform("projection", projection);
+ _sky->render();
+ _skyShader.unbind();
}
void SceneViewer::mousePressEvent(QMouseEvent* event) {
diff --git a/FinalProject/sceneviewer.h b/FinalProject/sceneviewer.h
index 8b1c9dd..4c35136 100644
--- a/FinalProject/sceneviewer.h
+++ b/FinalProject/sceneviewer.h
@@ -28,7 +28,7 @@ private:
// Shader program for objects
ShaderProgram _shaderProgram = ShaderProgram::empty();
ShaderProgram _skyShader = ShaderProgram::empty();
- skybox* sky;
+ SkyBox* _sky;
// Main camera
Camera _camera;
float _cameraMovementSpeed = 0.02f;
diff --git a/FinalProject/skybox.cpp b/FinalProject/skybox.cpp
index ba2b009..f3061b8 100644
--- a/FinalProject/skybox.cpp
+++ b/FinalProject/skybox.cpp
@@ -1,13 +1,12 @@
-#include "utils.h"
-#include "skybox.h"
-#include "shader.h"
-#include "camera.h"
-
#include
#include
#include
-skybox::skybox(std::string path){
+#include "skybox.h"
+#include "shader.h"
+#include "camera.h"
+
+SkyBox::SkyBox(std::string path){
faces.clear();
faces.push_back(path + "/right.jpg");
faces.push_back(path + "/left.jpg");
@@ -27,7 +26,7 @@ skybox::skybox(std::string path){
OPENGL_EXTRA_FUNCTIONS->glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
}
-void skybox::render() {
+void SkyBox::render() {
OPENGL_EXTRA_FUNCTIONS->glDepthFunc(GL_LEQUAL); // change depth function so depth test passes when values are equal to depth buffer's content
// skybox cube
OPENGL_EXTRA_FUNCTIONS->glBindVertexArray(skyboxVAO);
@@ -38,7 +37,7 @@ void skybox::render() {
OPENGL_EXTRA_FUNCTIONS->glDepthFunc(GL_LESS); // set depth function back to default
}
-unsigned int skybox::loadCubemap(std::vector faces)
+unsigned int SkyBox::loadCubemap(std::vector faces)
{
unsigned int textureID;
OPENGL_FUNCTIONS->glGenTextures(1, &textureID);
diff --git a/FinalProject/skybox.h b/FinalProject/skybox.h
index ba0f1ec..48c66e8 100644
--- a/FinalProject/skybox.h
+++ b/FinalProject/skybox.h
@@ -1,17 +1,17 @@
#pragma once
+#include
+#include
+
#include "utils.h"
#include "shader.h"
#include "camera.h"
-#include
-#include
-
-class skybox {
+class SkyBox {
public:
std::vector faces;
- skybox(std::string path);
+ SkyBox(std::string path);
unsigned int cubemapTexture, skyboxVAO, skyboxVBO;
void render();
private:
diff --git a/FinalProject/skyboxfragmentshader.glsl b/FinalProject/skyboxfragmentshader.glsl
new file mode 100644
index 0000000..5d0e53e
--- /dev/null
+++ b/FinalProject/skyboxfragmentshader.glsl
@@ -0,0 +1,11 @@
+#version 330 core
+out vec4 FragColor;
+
+in vec3 TexCoords;
+
+uniform samplerCube skybox;
+
+void main()
+{
+ FragColor = texture(skybox, TexCoords);
+}
\ No newline at end of file
diff --git a/FinalProject/skyboxvertexshader.glsl b/FinalProject/skyboxvertexshader.glsl
new file mode 100644
index 0000000..2a35233
--- /dev/null
+++ b/FinalProject/skyboxvertexshader.glsl
@@ -0,0 +1,15 @@
+#version 330 core
+layout (location = 0) in vec3 aPos;
+
+out vec3 TexCoords;
+
+uniform mat4 projection;
+uniform mat4 view;
+
+void main()
+{
+ TexCoords = aPos;
+ vec4 pos = projection * view * vec4(aPos, 1.0);
+ gl_Position = pos.xyww;
+ gl_Position.y = -gl_Position.y;
+}
\ No newline at end of file
diff --git a/FinalProject/terrainfragmentshader.glsl b/FinalProject/terrainfragmentshader.glsl
new file mode 100644
index 0000000..02255ad
--- /dev/null
+++ b/FinalProject/terrainfragmentshader.glsl
@@ -0,0 +1,13 @@
+#version 330 core
+out vec4 FragColor;
+
+in vec3 ourColor;
+in vec2 TexCoord;
+
+// texture sampler
+uniform sampler2D texture1;
+
+void main()
+{
+ FragColor = texture(texture1, TexCoord);
+}
\ No newline at end of file
diff --git a/FinalProject/terrainvertexshader.glsl b/FinalProject/terrainvertexshader.glsl
new file mode 100644
index 0000000..e19fa8b
--- /dev/null
+++ b/FinalProject/terrainvertexshader.glsl
@@ -0,0 +1,22 @@
+#version 330 core
+layout (location = 0) in vec3 aPos;
+layout (location = 1) in vec3 aColor;
+layout (location = 2) in vec2 aTexCoord;
+
+out vec3 ourColor;
+out vec2 TexCoord;
+
+uniform mat4 model;
+uniform mat4 view;
+uniform mat4 projection;
+
+void main()
+{
+ gl_Position = projection * view * model * vec4(aPos, 1.0);
+ ourColor = aColor;
+ TexCoord = vec2(aTexCoord.x, aTexCoord.y);
+}
+
+
+
+
diff --git a/skybox/back.jpg b/SkyBoxes/back.jpg
similarity index 100%
rename from skybox/back.jpg
rename to SkyBoxes/back.jpg
diff --git a/skybox/bottom.jpg b/SkyBoxes/bottom.jpg
similarity index 100%
rename from skybox/bottom.jpg
rename to SkyBoxes/bottom.jpg
diff --git a/skybox/front.jpg b/SkyBoxes/front.jpg
similarity index 100%
rename from skybox/front.jpg
rename to SkyBoxes/front.jpg
diff --git a/skybox/left.jpg b/SkyBoxes/left.jpg
similarity index 100%
rename from skybox/left.jpg
rename to SkyBoxes/left.jpg
diff --git a/skybox/right.jpg b/SkyBoxes/right.jpg
similarity index 100%
rename from skybox/right.jpg
rename to SkyBoxes/right.jpg
diff --git a/skybox/top.jpg b/SkyBoxes/top.jpg
similarity index 100%
rename from skybox/top.jpg
rename to SkyBoxes/top.jpg