From 95b2ec0acc6a2b2d5a340af730f6082fc5e946a6 Mon Sep 17 00:00:00 2001
From: andreistr21 <60103919+andreistr21@users.noreply.github.com>
Date: Fri, 11 Feb 2022 13:28:03 +0100
Subject: [PATCH] Improved bubbles
---
cw 6/grk-cw6.vcxproj | 2 ++
cw 6/grk-cw6.vcxproj.filters | 6 ++++
cw 6/shaders/bubbles_shader_color.frag | 13 ++++++++
cw 6/shaders/bubbles_shader_color.vert | 16 ++++++++++
cw 6/src/main_6_1.cpp | 42 +++++++++++++++++++++++---
5 files changed, 74 insertions(+), 5 deletions(-)
create mode 100644 cw 6/shaders/bubbles_shader_color.frag
create mode 100644 cw 6/shaders/bubbles_shader_color.vert
diff --git a/cw 6/grk-cw6.vcxproj b/cw 6/grk-cw6.vcxproj
index af61d3f..be4dfe3 100644
--- a/cw 6/grk-cw6.vcxproj
+++ b/cw 6/grk-cw6.vcxproj
@@ -41,6 +41,8 @@
+
+
{10701B86-9B0B-46A1-85DA-6238CBCC507B}
diff --git a/cw 6/grk-cw6.vcxproj.filters b/cw 6/grk-cw6.vcxproj.filters
index ff18640..8bc346a 100644
--- a/cw 6/grk-cw6.vcxproj.filters
+++ b/cw 6/grk-cw6.vcxproj.filters
@@ -102,6 +102,12 @@
Shader Files
+
+
+ Shader Files
+
+
+ Shader Files
\ No newline at end of file
diff --git a/cw 6/shaders/bubbles_shader_color.frag b/cw 6/shaders/bubbles_shader_color.frag
new file mode 100644
index 0000000..c791d67
--- /dev/null
+++ b/cw 6/shaders/bubbles_shader_color.frag
@@ -0,0 +1,13 @@
+#version 410 core
+
+uniform vec3 objectColor;
+uniform vec3 lightDir;
+
+in vec3 interpNormal;
+
+void main()
+{
+ vec3 normal = normalize(interpNormal);
+ float diffuse = 0.4;
+ gl_FragColor = vec4(objectColor * diffuse, 1.0);
+}
diff --git a/cw 6/shaders/bubbles_shader_color.vert b/cw 6/shaders/bubbles_shader_color.vert
new file mode 100644
index 0000000..ac46ad3
--- /dev/null
+++ b/cw 6/shaders/bubbles_shader_color.vert
@@ -0,0 +1,16 @@
+#version 410 core
+
+layout(location = 0) in vec3 vertexPosition;
+layout(location = 1) in vec3 vertexNormal;
+layout(location = 2) in vec2 vertexTexCoord;
+
+uniform mat4 modelViewProjectionMatrix;
+uniform mat4 modelMatrix;
+
+out vec3 interpNormal;
+
+void main()
+{
+ gl_Position = modelViewProjectionMatrix * vec4(vertexPosition, 1.0);
+ interpNormal = (modelMatrix * vec4(vertexNormal, 0.0)).xyz;
+}
\ No newline at end of file
diff --git a/cw 6/src/main_6_1.cpp b/cw 6/src/main_6_1.cpp
index ac20f9b..e87b416 100644
--- a/cw 6/src/main_6_1.cpp
+++ b/cw 6/src/main_6_1.cpp
@@ -24,8 +24,6 @@ enum {
PASS_NORMAL, PASS_CAUSTIC
};
-void bubbleManager();
-
static GLboolean HaveTexObj = GL_FALSE;
static int reportSpeed = 0;
static int dinoDisplayList;
@@ -60,6 +58,7 @@ glm::vec3 fishLocation2[fish2Number];
GLuint programColor;
GLuint programTexture;
GLuint skyboxTexture;
+GLuint bubblesColor;
Core::Shader_Loader shaderLoader;
@@ -151,6 +150,8 @@ glm::vec3 starLocation;
bool starIsPlaced = false;
+void bubbleManager();
+
void keyboard(unsigned char key, int x, int y)
{
@@ -321,6 +322,24 @@ void drawObjectColor(Core::RenderContext context, glm::mat4 modelMatrix, glm::ve
glUseProgram(0);
}
+void drawBubbleColor(Core::RenderContext context, glm::mat4 modelMatrix, glm::vec3 color)
+{
+ GLuint program = bubblesColor;
+
+ glUseProgram(program);
+
+ glUniform3f(glGetUniformLocation(program, "objectColor"), color.x, color.y, color.z);
+ glUniform3f(glGetUniformLocation(program, "lightDir"), lightDir.x, lightDir.y, lightDir.z);
+
+ glm::mat4 transformation = perspectiveMatrix * cameraMatrix * modelMatrix;
+ glUniformMatrix4fv(glGetUniformLocation(program, "modelViewProjectionMatrix"), 1, GL_FALSE, (float*)&transformation);
+ glUniformMatrix4fv(glGetUniformLocation(program, "modelMatrix"), 1, GL_FALSE, (float*)&modelMatrix);
+
+ Core::DrawContext(context);
+
+ glUseProgram(0);
+}
+
void drawObjectTexture(Core::RenderContext context, glm::mat4 modelMatrix, GLuint textureId)
{
GLuint program = programTexture;
@@ -561,7 +580,7 @@ void drawScene()
drawObjectTexture(fish1Context, modelMatrix, textureFish01);
- bubbleManager();
+ //bubbleManager();
gameManager();
for (int i = 0; i < fish1Number; i++)
@@ -647,6 +666,8 @@ void drawScene()
drawPlaneTexture(planeContext, glm::rotate(glm::radians(90.f), glm::vec3(0.f, 0.f, 1.f)), groundTexture);
+ bubbleManager();
+
glUseProgram(skyboxTexture);
glUniform1i(glGetUniformLocation(skyboxTexture, "skybox"), 0);
glm::mat4 transformation = perspectiveMatrix * glm::mat4(glm::mat3(cameraMatrix));
@@ -667,9 +688,15 @@ void drawScene()
glHint(GL_FOG_HINT, GL_DONT_CARE); // Fog Hint Value
glFogf(GL_FOG_START, 1.0f); // Fog Start Depth
glFogf(GL_FOG_END, 5.0f); // Fog End Depth
+
glEnable(GL_FOG);
+
glDepthFunc(GL_LESS); // set depth function back to default
+
+
+
+
glUseProgram(0);
@@ -739,10 +766,11 @@ void bubbleManager() {
glm::mat4 modelMatrix = glm::translate(bubbleLocation[i]);
// Scaling models
- glm::vec3 scale = glm::vec3(0.05, 0.05, 0.05);
+ glm::vec3 scale = glm::vec3(0.02, 0.02, 0.02);
modelMatrix = glm::scale(modelMatrix, scale);
//drawObjectTexture(bubbleContext, modelMatrix, bubbleTexture);
- drawObjectColor(bubbleContext, modelMatrix, glm::vec3(.3f, .55f, 0.96f));
+ //drawBubbleColor(bubbleContext, modelMatrix, glm::vec4(.3f, .55f, 0.96f, 1.f));
+ drawBubbleColor(bubbleContext, modelMatrix, glm::vec3(.3f, .55f, 0.96f));
}
}
@@ -825,6 +853,7 @@ void renderScene()
glEnable(GL_BLEND);
drawSceneLight(PASS_CAUSTIC);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
/* Restore fragment operations to normal. */
glDepthMask(GL_TRUE);
@@ -833,6 +862,7 @@ void renderScene()
}
glPopMatrix();
+
glutSwapBuffers();
if (reportSpeed) {
@@ -893,6 +923,7 @@ void init()
programColor = shaderLoader.CreateProgram("shaders/shader_color.vert", "shaders/shader_color.frag");
programTexture = shaderLoader.CreateProgram("shaders/shader_tex.vert", "shaders/shader_tex.frag");
skyboxTexture = shaderLoader.CreateProgram("shaders/skybox_tex.vert", "shaders/skybox_tex.frag");
+ bubblesColor = shaderLoader.CreateProgram("shaders/bubbles_shader_color.vert", "shaders/bubbles_shader_color.frag");
//Zaladowanie tekstur do skyboxa
cubemapTexture = loadCubemap(faces);
@@ -977,6 +1008,7 @@ int main(int argc, char** argv)
glutInitWindowSize(WIN_WIDTH, WIN_HEIGHT);
glutCreateWindow("OpenGL Pierwszy Program");
+
glewInit();
init();