Add reflective and refractive models
This commit is contained in:
54
src/main.cc
54
src/main.cc
@@ -267,20 +267,22 @@ int main() {
|
||||
|
||||
Mesh screen = {screen_vertices, screen_indices, {}};
|
||||
|
||||
Shader main_shader {"shaders/vert.glsl", "shaders/frag.glsl"};
|
||||
Shader light_shader {"shaders/vert.glsl", "shaders/light_frag.glsl"};
|
||||
Shader skybox_shader {"shaders/sb_vert.glsl", "shaders/sb_frag.glsl"};
|
||||
Shader post_processing {"shaders/pp_vert.glsl", "shaders/pp_frag.glsl"};
|
||||
Shader main_shader {"shaders/vert.glsl", "shaders/frag.glsl"};
|
||||
Shader light_shader {"shaders/vert.glsl", "shaders/light_frag.glsl"};
|
||||
Shader skybox_shader {"shaders/sb_vert.glsl", "shaders/sb_frag.glsl"};
|
||||
Shader reflective_shader {"shaders/vert.glsl", "shaders/reflective_frag.glsl"};
|
||||
Shader refractive_shader {"shaders/vert.glsl", "shaders/refractive_frag.glsl"};
|
||||
Shader post_processing {"shaders/pp_vert.glsl", "shaders/pp_frag.glsl"};
|
||||
|
||||
const float camera_speed = 25.0f;
|
||||
glm::vec3 camera_position = glm::vec3(-2.0f, 0.0f, 6.0f);
|
||||
glm::vec3 camera_position = glm::vec3(-2.5f, 0.0f, 8.0f);
|
||||
glm::vec3 camera_forward = glm::vec3(0.0f);
|
||||
glm::vec3 world_up = glm::vec3(0.0f, 1.0f, 0.0f);
|
||||
glm::vec3 light_ambient = glm::vec3(0.2f, 0.2f, 0.2f);
|
||||
glm::vec3 light_diffuse = glm::vec3(0.75f, 0.75f, 0.75f);
|
||||
glm::vec3 light_specular = glm::vec3(1.0f, 1.0f, 1.0f);
|
||||
|
||||
float yaw = -70.0f;
|
||||
float yaw = -75.0f;
|
||||
float pitch = 0.0f;
|
||||
|
||||
glm::mat4 model = glm::mat4(1.0f);
|
||||
@@ -293,6 +295,8 @@ int main() {
|
||||
|
||||
light_shader.set_mat4("projection", projection);
|
||||
skybox_shader.set_mat4("projection", projection);
|
||||
reflective_shader.set_mat4("projection", projection);
|
||||
refractive_shader.set_mat4("projection", projection);
|
||||
|
||||
std::vector<glm::vec3> point_light_positions = {
|
||||
glm::vec3( 0.7f, 0.2f, 2.0f),
|
||||
@@ -445,6 +449,10 @@ int main() {
|
||||
main_shader.set_float("spot_light.outer_cutoff", glm::cos(glm::radians(17.5)));
|
||||
main_shader.set_mat4("view", view);
|
||||
light_shader.set_mat4("view", view);
|
||||
reflective_shader.set_vec3("camera_position", camera_position);
|
||||
reflective_shader.set_mat4("view", view);
|
||||
refractive_shader.set_vec3("camera_position", camera_position);
|
||||
refractive_shader.set_mat4("view", view);
|
||||
skybox_shader.set_mat4("view", glm::mat4(glm::mat3(view)));
|
||||
|
||||
// Main render pass
|
||||
@@ -464,15 +472,29 @@ int main() {
|
||||
main_shader.set_mat3("normal_mat", normal_mat);
|
||||
suzanne.draw(main_shader);
|
||||
|
||||
// Draw light source
|
||||
for (int i = 0; i < point_light_positions.size(); ++i) {
|
||||
model = glm::translate(glm::mat4(1.0f), point_light_positions[i]);
|
||||
model = glm::scale(model, glm::vec3(0.2f));
|
||||
light_shader.activate();
|
||||
light_shader.set_mat4("model", model);
|
||||
light_shader.set_vec3("light_diffuse", light_diffuse);
|
||||
light.draw(light_shader);
|
||||
}
|
||||
model = glm::translate(glm::mat4(1.0f), glm::vec3(3.0f, 0.0f, 0.0f));
|
||||
normal_mat = glm::transpose(glm::inverse(model));
|
||||
reflective_shader.set_mat4("model", model);
|
||||
reflective_shader.set_mat3("normal_mat", normal_mat);
|
||||
suzanne.draw(reflective_shader);
|
||||
|
||||
glDisable(GL_CULL_FACE);
|
||||
model = glm::translate(glm::mat4(1.0f), glm::vec3(-3.0f, 0.0f, 0.0f));
|
||||
normal_mat = glm::transpose(glm::inverse(model));
|
||||
refractive_shader.set_mat4("model", model);
|
||||
refractive_shader.set_mat3("normal_mat", normal_mat);
|
||||
suzanne.draw(refractive_shader);
|
||||
glEnable(GL_CULL_FACE);
|
||||
|
||||
// Draw point lights
|
||||
// for (int i = 0; i < point_light_positions.size(); ++i) {
|
||||
// model = glm::translate(glm::mat4(1.0f), point_light_positions[i]);
|
||||
// model = glm::scale(model, glm::vec3(0.2f));
|
||||
// light_shader.activate();
|
||||
// light_shader.set_mat4("model", model);
|
||||
// light_shader.set_vec3("light_diffuse", light_diffuse);
|
||||
// light.draw(light_shader);
|
||||
// }
|
||||
|
||||
// Draw skybox
|
||||
glDisable(GL_CULL_FACE);
|
||||
@@ -738,6 +760,8 @@ void Mesh::draw(Shader &shader) {
|
||||
}
|
||||
|
||||
void Model::draw(Shader &shader) {
|
||||
shader.activate();
|
||||
|
||||
for (int i = 0; i < meshes.size(); ++i) {
|
||||
meshes[i].draw(shader);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user