Implement the red windows.
This commit is contained in:
parent
11b7f4a3ed
commit
f51df89054
18 changed files with 74 additions and 36 deletions
File diff suppressed because one or more lines are too long
BIN
19-blending/assets/blending_transparent_window.png
Normal file
BIN
19-blending/assets/blending_transparent_window.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.4 KiB |
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 508 KiB |
BIN
19-blending/assets/marble.png
Normal file
BIN
19-blending/assets/marble.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 89 KiB |
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
1
19-blending/assets/window.bbmodel
Normal file
1
19-blending/assets/window.bbmodel
Normal file
File diff suppressed because one or more lines are too long
BIN
19-blending/assets/window.glb
Normal file
BIN
19-blending/assets/window.glb
Normal file
Binary file not shown.
|
|
@ -16,7 +16,7 @@
|
||||||
"specularMap": 0
|
"specularMap": 0
|
||||||
},
|
},
|
||||||
"shiny": {
|
"shiny": {
|
||||||
"ambient": [0.5, 0.25, 0.31],
|
"ambient": [0.5, 0.5, 0.5],
|
||||||
"shininess": 10000.0,
|
"shininess": 10000.0,
|
||||||
"diffuseMap": 0,
|
"diffuseMap": 0,
|
||||||
"specularMap": 0
|
"specularMap": 0
|
||||||
|
|
@ -34,6 +34,10 @@
|
||||||
"grass": {
|
"grass": {
|
||||||
"directory": "assets",
|
"directory": "assets",
|
||||||
"model_path": "grass.glb"
|
"model_path": "grass.glb"
|
||||||
|
},
|
||||||
|
"window": {
|
||||||
|
"directory": "assets",
|
||||||
|
"model_path": "window.glb"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"things": [
|
"things": [
|
||||||
|
|
@ -41,9 +45,9 @@
|
||||||
"rotation": {"angle": 0.0, "axes": [1.0, 1.0, 1.0]},
|
"rotation": {"angle": 0.0, "axes": [1.0, 1.0, 1.0]},
|
||||||
"scale": 1.0,
|
"scale": 1.0,
|
||||||
"material": "default"},
|
"material": "default"},
|
||||||
{"model": "marble_cube", "position": [2.0, 0.0, 0.0],
|
{"model": "marble_cube", "position": [1.5, 0.0, 1.0],
|
||||||
"rotation": {"angle": 0.0, "axes": [1.0, 1.0, 1.0]},
|
"rotation": {"angle": 0.0, "axes": [1.0, 1.0, 1.0]},
|
||||||
"scale": 1.0,
|
"scale": 2.0,
|
||||||
"material": "default"},
|
"material": "default"},
|
||||||
{"model": "metal_floor", "position": [0.0, 0.0, 0.0],
|
{"model": "metal_floor", "position": [0.0, 0.0, 0.0],
|
||||||
"rotation": {"angle": 0.0, "axes": [1.0, 1.0, 1.0]},
|
"rotation": {"angle": 0.0, "axes": [1.0, 1.0, 1.0]},
|
||||||
|
|
@ -52,7 +56,15 @@
|
||||||
{"model": "grass", "position": [0.5, 0.13, 0.0],
|
{"model": "grass", "position": [0.5, 0.13, 0.0],
|
||||||
"rotation": {"angle": 90.0, "axes": [1.0,0.0,0.0]},
|
"rotation": {"angle": 90.0, "axes": [1.0,0.0,0.0]},
|
||||||
"scale": 1.0,
|
"scale": 1.0,
|
||||||
"material": "default"}
|
"material": "default"},
|
||||||
|
{"model": "window", "position": [1.75, 0.25, 0.25],
|
||||||
|
"rotation": {"angle": 90.0, "axes": [1.0,0.0,0.0]},
|
||||||
|
"scale": 1.0,
|
||||||
|
"material": "shiny"},
|
||||||
|
{"model": "window", "position": [1.5, 0.25, 0.0],
|
||||||
|
"rotation": {"angle": 90.0, "axes": [1.0,0.0,0.0]},
|
||||||
|
"scale": 1.0,
|
||||||
|
"material": "shiny"}
|
||||||
],
|
],
|
||||||
"camera": {
|
"camera": {
|
||||||
"position": [0.0, 0.1, 3.0],
|
"position": [0.0, 0.1, 3.0],
|
||||||
|
|
@ -73,7 +85,8 @@
|
||||||
"linear": 0.0,
|
"linear": 0.0,
|
||||||
"quadratic": 0.0,
|
"quadratic": 0.0,
|
||||||
"cut_off": 0.0,
|
"cut_off": 0.0,
|
||||||
"outer_cut_off": 0.0
|
"outer_cut_off": 0.0,
|
||||||
|
"on": true
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"positioned": [
|
"positioned": [
|
||||||
|
|
@ -87,7 +100,8 @@
|
||||||
"linear": 0.09,
|
"linear": 0.09,
|
||||||
"quadratic": 0.032,
|
"quadratic": 0.032,
|
||||||
"cut_off": 12.5,
|
"cut_off": 12.5,
|
||||||
"outer_cut_off": 17.5
|
"outer_cut_off": 17.5,
|
||||||
|
"on": true
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"spot": [
|
"spot": [
|
||||||
|
|
@ -102,7 +116,8 @@
|
||||||
"linear": 0.09,
|
"linear": 0.09,
|
||||||
"quadratic": 0.032,
|
"quadratic": 0.032,
|
||||||
"cut_off": 12.5,
|
"cut_off": 12.5,
|
||||||
"outer_cut_off": 17.5
|
"outer_cut_off": 17.5,
|
||||||
|
"on": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
#include <glm/glm.hpp>
|
#include <glm/glm.hpp>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <map>
|
#include <unordered_map>
|
||||||
#include "json.hpp"
|
#include "json.hpp"
|
||||||
|
|
||||||
const unsigned int SCR_WIDTH = 800;
|
const unsigned int SCR_WIDTH = 800;
|
||||||
|
|
@ -34,6 +34,7 @@ namespace components {
|
||||||
float quadratic=0.0f;
|
float quadratic=0.0f;
|
||||||
float cut_off=0.0f;
|
float cut_off=0.0f;
|
||||||
float outer_cut_off=0.0f;
|
float outer_cut_off=0.0f;
|
||||||
|
bool on=true;
|
||||||
|
|
||||||
void adjust(float amount) {
|
void adjust(float amount) {
|
||||||
ambient += amount;
|
ambient += amount;
|
||||||
|
|
@ -46,7 +47,7 @@ namespace components {
|
||||||
position, direction,
|
position, direction,
|
||||||
ambient, diffuse, specular,
|
ambient, diffuse, specular,
|
||||||
constant, linear, quadratic,
|
constant, linear, quadratic,
|
||||||
cut_off, outer_cut_off);
|
cut_off, outer_cut_off, on);
|
||||||
|
|
||||||
struct Lighting {
|
struct Lighting {
|
||||||
std::vector<Light> directional;
|
std::vector<Light> directional;
|
||||||
|
|
@ -102,8 +103,8 @@ namespace components {
|
||||||
struct Scene {
|
struct Scene {
|
||||||
components::Shader shader;
|
components::Shader shader;
|
||||||
components::Shader light_shader;
|
components::Shader light_shader;
|
||||||
std::map<std::string, Material> materials;
|
std::unordered_map<std::string, Material> materials;
|
||||||
std::map<std::string, Model> models;
|
std::unordered_map<std::string, Model> models;
|
||||||
std::vector<Thing> things;
|
std::vector<Thing> things;
|
||||||
Camera camera;
|
Camera camera;
|
||||||
Lighting light;
|
Lighting light;
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
#include <stb_image.h>
|
#include <stb_image.h>
|
||||||
#include "scene.hpp"
|
#include "scene.hpp"
|
||||||
#include "utils.hpp"
|
#include "utils.hpp"
|
||||||
|
|
||||||
void framebuffer_size_callback(GLFWwindow *window, int width, int height);
|
void framebuffer_size_callback(GLFWwindow *window, int width, int height);
|
||||||
|
|
||||||
void init_glfw() {
|
void init_glfw() {
|
||||||
|
|
@ -71,6 +72,12 @@ void process_input(GLFWwindow *window, Scene& scene) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if(glfwGetKey(window, GLFW_KEY_L) == GLFW_PRESS) {
|
if(glfwGetKey(window, GLFW_KEY_L) == GLFW_PRESS) {
|
||||||
|
scene.light.camera.on = !scene.light.camera.on;
|
||||||
|
|
||||||
|
scene.shader.apply_lighting(scene.light);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(glfwGetKey(window, GLFW_KEY_O) == GLFW_PRESS) {
|
||||||
for(auto& light : scene.light.directional) {
|
for(auto& light : scene.light.directional) {
|
||||||
light.adjust(-0.01f);
|
light.adjust(-0.01f);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,15 @@ void Scene::update() {
|
||||||
deltaTime = currentFrame - lastFrame;
|
deltaTime = currentFrame - lastFrame;
|
||||||
lastFrame = currentFrame;
|
lastFrame = currentFrame;
|
||||||
|
|
||||||
|
// for now just detect the camera moved and do spotlight update
|
||||||
|
if(camera.dirty) {
|
||||||
|
light.camera.position = camera.position;
|
||||||
|
light.camera.direction = camera.front;
|
||||||
|
// just update the camera's light
|
||||||
|
shader.apply_spot_light(light.camera, 0);
|
||||||
|
camera.dirty = false;
|
||||||
|
}
|
||||||
|
|
||||||
camera.update(deltaTime);
|
camera.update(deltaTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -38,15 +47,6 @@ void Scene::render(GLFWwindow* window) {
|
||||||
shader.setMat4("view", view);
|
shader.setMat4("view", view);
|
||||||
shader.setMat4("projection", projection);
|
shader.setMat4("projection", projection);
|
||||||
|
|
||||||
// for now just detect the camera moved and do spotlight update
|
|
||||||
if(camera.dirty) {
|
|
||||||
light.camera.position = camera.position;
|
|
||||||
light.camera.direction = camera.front;
|
|
||||||
// just update the camera's light
|
|
||||||
shader.apply_spot_light(light.camera, 0);
|
|
||||||
camera.dirty = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(auto& thing : things) {
|
for(auto& thing : things) {
|
||||||
draw_thing(shader, thing);
|
draw_thing(shader, thing);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
#include "camera.hpp"
|
#include "camera.hpp"
|
||||||
#include "components.hpp"
|
#include "components.hpp"
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <unordered_map>
|
||||||
|
|
||||||
struct Thing {
|
struct Thing {
|
||||||
std::string name;
|
std::string name;
|
||||||
|
|
@ -20,16 +21,17 @@ struct Thing {
|
||||||
components::Position position;
|
components::Position position;
|
||||||
components::Rotation rotation;
|
components::Rotation rotation;
|
||||||
float scale;
|
float scale;
|
||||||
|
float distance = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Scene {
|
struct Scene {
|
||||||
Shader shader;
|
Shader shader;
|
||||||
Shader light_shader;
|
Shader light_shader;
|
||||||
|
|
||||||
std::map<std::string, components::Material> materials;
|
std::unordered_map<std::string, components::Material> materials;
|
||||||
Camera camera;
|
Camera camera;
|
||||||
components::Lighting light;
|
components::Lighting light;
|
||||||
std::map<std::string, Model> models;
|
std::unordered_map<std::string, Model> models;
|
||||||
std::vector<Thing> things;
|
std::vector<Thing> things;
|
||||||
|
|
||||||
float deltaTime = 0.0f;
|
float deltaTime = 0.0f;
|
||||||
|
|
|
||||||
|
|
@ -134,9 +134,6 @@ void Shader::apply_lighting(const Lighting& lighting) {
|
||||||
setInt("pointLightCount", lighting.positioned.size());
|
setInt("pointLightCount", lighting.positioned.size());
|
||||||
setInt("dirLightCount", lighting.directional.size());
|
setInt("dirLightCount", lighting.directional.size());
|
||||||
|
|
||||||
// need +1 for the camera spot light
|
|
||||||
setInt("spotLightCount", lighting.spot.size() + 1);
|
|
||||||
|
|
||||||
for(size_t i = 0; i < lighting.directional.size(); i++) {
|
for(size_t i = 0; i < lighting.directional.size(); i++) {
|
||||||
apply_dir_light(lighting.directional[i], i);
|
apply_dir_light(lighting.directional[i], i);
|
||||||
}
|
}
|
||||||
|
|
@ -145,13 +142,25 @@ void Shader::apply_lighting(const Lighting& lighting) {
|
||||||
apply_point_light(lighting.positioned[i], i);
|
apply_point_light(lighting.positioned[i], i);
|
||||||
}
|
}
|
||||||
|
|
||||||
// set the first spotlight to the camera light
|
// set the first spotlight to the camera light if given
|
||||||
apply_spot_light(lighting.camera, 0);
|
size_t i = 0;
|
||||||
|
|
||||||
for(size_t i = 0; i < lighting.spot.size(); i++) {
|
// camera is optional, so only add if used
|
||||||
// need to be off by one because the camera is a spot light
|
if(lighting.camera.on) {
|
||||||
apply_spot_light(lighting.spot[i], i+1);
|
apply_spot_light(lighting.camera, 0);
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// gross but that's fine for now
|
||||||
|
for(; i < lighting.spot.size(); i++) {
|
||||||
|
// need to be off by one because the camera is a spot light
|
||||||
|
if(lighting.spot[i].on) {
|
||||||
|
apply_spot_light(lighting.spot[i], i+1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// need +1 for the camera spot light
|
||||||
|
setInt("spotLightCount", (int)i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,8 @@
|
||||||
"linear": 0.0,
|
"linear": 0.0,
|
||||||
"quadratic": 0.0,
|
"quadratic": 0.0,
|
||||||
"cut_off": 0.0,
|
"cut_off": 0.0,
|
||||||
"outer_cut_off": 0.0
|
"outer_cut_off": 0.0,
|
||||||
|
"on": true
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"positioned": [
|
"positioned": [
|
||||||
|
|
@ -31,7 +32,8 @@
|
||||||
"linear": 0.09,
|
"linear": 0.09,
|
||||||
"quadratic": 0.032,
|
"quadratic": 0.032,
|
||||||
"cut_off": 12.5,
|
"cut_off": 12.5,
|
||||||
"outer_cut_off": 17.5
|
"outer_cut_off": 17.5,
|
||||||
|
"on": true
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"spot": [
|
"spot": [
|
||||||
|
|
@ -47,7 +49,8 @@
|
||||||
"linear": 0.09,
|
"linear": 0.09,
|
||||||
"quadratic": 0.032,
|
"quadratic": 0.032,
|
||||||
"cut_off": 12.5,
|
"cut_off": 12.5,
|
||||||
"outer_cut_off": 17.5
|
"outer_cut_off": 17.5,
|
||||||
|
"on": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue