diff --git a/24-cubemaps/config.json b/24-cubemaps/config.json index 3fe7222..8c7d025 100644 --- a/24-cubemaps/config.json +++ b/24-cubemaps/config.json @@ -1,8 +1,8 @@ { "scene": { "shader": { - "vertex_path": "shaders/21-framebuffers.vert.glsl", - "frag_path": "shaders/21-framebuffers.frag.glsl" + "vertex_path": "shaders/24-vert.glsl", + "frag_path": "shaders/24-frag.glsl" }, "screen_shader": { "vertex_path": "shaders/21-screen.vert.glsl", @@ -13,12 +13,12 @@ "frag_path": "shaders/24-skybox.frag.glsl" }, "skybox_faces": [ - "../assets/skybox/right.jpg", - "../assets/skybox/left.jpg", - "../assets/skybox/top.jpg", - "../assets/skybox/bottom.jpg", - "../assets/skybox/front.jpg", - "../assets/skybox/back.jpg" + "../assets/skybox/sky/right.jpg", + "../assets/skybox/sky/left.jpg", + "../assets/skybox/sky/top.jpg", + "../assets/skybox/sky/bottom.jpg", + "../assets/skybox/sky/front.jpg", + "../assets/skybox/sky/back.jpg" ], "materials": { "default": { @@ -53,22 +53,10 @@ } }, "things": [ - {"model": "marble_cube", "position": [-1.0, 0.0, -1.0], - "rotation": {"angle": 0.0, "axes": [1.0, 1.0, 1.0]}, - "scale": 1.0, - "material": "default"}, {"model": "marble_cube", "position": [1.5, 0.0, -1.0], "rotation": {"angle": 0.0, "axes": [1.0, 1.0, 1.0]}, "scale": 2.0, "material": "default"}, - {"model": "metal_floor", "position": [0.0, 0.0, 0.0], - "rotation": {"angle": 0.0, "axes": [1.0, 1.0, 1.0]}, - "scale": 1.0, - "material": "shiny"}, - {"model": "grass", "position": [0.5, 0.13, 0.0], - "rotation": {"angle": 90.0, "axes": [1.0,0.0,0.0]}, - "scale": 1.0, - "material": "default"}, {"model": "window", "position": [1.5, 0.25, 0.0], "rotation": {"angle": 90.0, "axes": [1.0,0.0,0.0]}, "scale": 1.0, diff --git a/24-cubemaps/shaders/24-frag.glsl b/24-cubemaps/shaders/24-frag.glsl new file mode 100644 index 0000000..44b8a3d --- /dev/null +++ b/24-cubemaps/shaders/24-frag.glsl @@ -0,0 +1,17 @@ +#version 330 core +out vec4 FragColor; + +in vec3 Normal; +in vec3 FragPos; +in vec2 TexCoords; + +uniform vec3 cameraPos; +uniform samplerCube skybox; + +void main() +{ + float ratio = 1.0/1.52; + vec3 I = normalize(FragPos - cameraPos); + vec3 R = refract(I, normalize(Normal), ratio); + FragColor = vec4(texture(skybox, R).rgb, 1.0); +} diff --git a/24-cubemaps/shaders/24-vert.glsl b/24-cubemaps/shaders/24-vert.glsl new file mode 100644 index 0000000..2df21b0 --- /dev/null +++ b/24-cubemaps/shaders/24-vert.glsl @@ -0,0 +1,21 @@ +#version 330 core +layout (location = 0) in vec3 aPos; +layout (location = 1) in vec3 aNormal; +layout (location = 2) in vec2 aTexCoords; + +out vec3 FragPos; +out vec3 Normal; +out vec2 TexCoords; +out vec3 Position; + +uniform mat4 model; +uniform mat4 view; +uniform mat4 projection; + +void main() +{ + Normal = mat3(transpose(inverse(model))) * aNormal; + FragPos = vec3(model * vec4(aPos, 1.0)); + gl_Position = projection * view * vec4(FragPos, 1.0); + TexCoords = aTexCoords; +} diff --git a/24-cubemaps/src/mesh.cpp b/24-cubemaps/src/mesh.cpp index 5c40960..6d8f212 100644 --- a/24-cubemaps/src/mesh.cpp +++ b/24-cubemaps/src/mesh.cpp @@ -1,9 +1,10 @@ #include "mesh.hpp" #include "dbc.hpp" -void Mesh::draw(Shader &shader) { - // CAN WE DO THIS LESS OFTEN OUTSIDE DRAWING? - apply_textures(shader); +void Mesh::draw(Shader &shader, bool with_textures) { + if(with_textures) { + apply_textures(shader); + } glBindVertexArray(VAO); glDrawElements(GL_TRIANGLES, indices.size(), GL_UNSIGNED_INT, 0); diff --git a/24-cubemaps/src/mesh.hpp b/24-cubemaps/src/mesh.hpp index 21160e7..d33095e 100644 --- a/24-cubemaps/src/mesh.hpp +++ b/24-cubemaps/src/mesh.hpp @@ -66,7 +66,7 @@ struct Mesh { setup_mesh(); } - void draw(Shader &shader); + void draw(Shader &shader, bool with_textures); void setup_mesh(); void apply_textures(const Shader& shader); }; diff --git a/24-cubemaps/src/model.cpp b/24-cubemaps/src/model.cpp index b4eac48..8c296bb 100644 --- a/24-cubemaps/src/model.cpp +++ b/24-cubemaps/src/model.cpp @@ -83,9 +83,9 @@ unsigned int texture_from_file(const std::string& directory, const std::string& return textureID; } -void Model::draw(Shader &shader) { +void Model::draw(Shader &shader, bool with_textures) { for(auto& mesh : meshes) { - mesh.draw(shader); + mesh.draw(shader, with_textures); } } diff --git a/24-cubemaps/src/model.hpp b/24-cubemaps/src/model.hpp index 5029439..c81bbcd 100644 --- a/24-cubemaps/src/model.hpp +++ b/24-cubemaps/src/model.hpp @@ -32,7 +32,7 @@ struct Model { load_model(); } - void draw(Shader &shader); + void draw(Shader &shader, bool with_textures=true); void load_model(); void process_node(const aiScene *scene, aiNode *node); diff --git a/24-cubemaps/src/scene.cpp b/24-cubemaps/src/scene.cpp index 645c12f..6d8bc9a 100644 --- a/24-cubemaps/src/scene.cpp +++ b/24-cubemaps/src/scene.cpp @@ -31,7 +31,7 @@ void Scene::draw_thing(Shader& with_shader, Thing& thing) with_shader.setMat4("model", model); - thing.model.draw(with_shader); + thing.model.draw(with_shader, false); } void Scene::render(GLFWwindow* window) { @@ -47,6 +47,7 @@ void Scene::render(GLFWwindow* window) { shader.use(); shader.setMat4("view", view); shader.setMat4("projection", projection); + shader.setVec3("cameraPos", camera.position); for(auto& thing : things) { draw_thing(shader, thing); diff --git a/assets/skybox/back.jpg b/assets/skybox/sky/back.jpg similarity index 100% rename from assets/skybox/back.jpg rename to assets/skybox/sky/back.jpg diff --git a/assets/skybox/bottom.jpg b/assets/skybox/sky/bottom.jpg similarity index 100% rename from assets/skybox/bottom.jpg rename to assets/skybox/sky/bottom.jpg diff --git a/assets/skybox/front.jpg b/assets/skybox/sky/front.jpg similarity index 100% rename from assets/skybox/front.jpg rename to assets/skybox/sky/front.jpg diff --git a/assets/skybox/left.jpg b/assets/skybox/sky/left.jpg similarity index 100% rename from assets/skybox/left.jpg rename to assets/skybox/sky/left.jpg diff --git a/assets/skybox/right.jpg b/assets/skybox/sky/right.jpg similarity index 100% rename from assets/skybox/right.jpg rename to assets/skybox/sky/right.jpg diff --git a/assets/skybox/top.jpg b/assets/skybox/sky/top.jpg similarity index 100% rename from assets/skybox/top.jpg rename to assets/skybox/sky/top.jpg diff --git a/assets/skybox/test/back.jpg b/assets/skybox/test/back.jpg new file mode 100644 index 0000000..ae2c738 Binary files /dev/null and b/assets/skybox/test/back.jpg differ diff --git a/assets/skybox/test/bottom.jpg b/assets/skybox/test/bottom.jpg new file mode 100644 index 0000000..447967c Binary files /dev/null and b/assets/skybox/test/bottom.jpg differ diff --git a/assets/skybox/test/front.jpg b/assets/skybox/test/front.jpg new file mode 100644 index 0000000..ce91dc8 Binary files /dev/null and b/assets/skybox/test/front.jpg differ diff --git a/assets/skybox/test/left.jpg b/assets/skybox/test/left.jpg new file mode 100644 index 0000000..8fdc7c6 Binary files /dev/null and b/assets/skybox/test/left.jpg differ diff --git a/assets/skybox/test/right.jpg b/assets/skybox/test/right.jpg new file mode 100644 index 0000000..f596282 Binary files /dev/null and b/assets/skybox/test/right.jpg differ diff --git a/assets/skybox/test/top.jpg b/assets/skybox/test/top.jpg new file mode 100644 index 0000000..b693cbb Binary files /dev/null and b/assets/skybox/test/top.jpg differ