Created a testing skybox and got the reflection and refraction working.

This commit is contained in:
Zed A. Shaw 2026-09-04 15:17:42 -04:00
parent 4ee5058e82
commit 29f1606085
20 changed files with 56 additions and 28 deletions

View file

@ -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,

View 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);
}

View 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;
}

View file

@ -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);

View file

@ -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);
};

View file

@ -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);
}
}

View file

@ -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);

View file

@ -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);