Created a testing skybox and got the reflection and refraction working.
This commit is contained in:
parent
4ee5058e82
commit
29f1606085
20 changed files with 56 additions and 28 deletions
|
|
@ -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,
|
||||
|
|
|
|||
17
24-cubemaps/shaders/24-frag.glsl
Normal file
17
24-cubemaps/shaders/24-frag.glsl
Normal file
|
|
@ -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);
|
||||
}
|
||||
21
24-cubemaps/shaders/24-vert.glsl
Normal file
21
24-cubemaps/shaders/24-vert.glsl
Normal file
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue