Skip to content
Snippets Groups Projects
Commit 1c738594 authored by Woohyung Choi's avatar Woohyung Choi
Browse files

Remove get_programs() in RenderObject.

Change render() for replace for Shader"lighting_specular"
parent b4d66332
Branches master
No related tags found
No related merge requests found
...@@ -69,9 +69,10 @@ RenderObject::RenderObject(Mesh * _mesh) ...@@ -69,9 +69,10 @@ RenderObject::RenderObject(Mesh * _mesh)
update_model_matrix(); update_model_matrix();
} }
GLuint RenderObject::get_programs()
Material *RenderObject::get_material()
{ {
return prog; return material;
} }
GLuint RenderObject::get_vertex_count() GLuint RenderObject::get_vertex_count()
...@@ -131,31 +132,48 @@ void RenderObject::move(glm::vec3 _direction, glm::vec1 _velocity) ...@@ -131,31 +132,48 @@ void RenderObject::move(glm::vec3 _direction, glm::vec1 _velocity)
update_model_matrix(); update_model_matrix();
} }
void RenderObject::set_program(GLuint _prog) void RenderObject::set_material(Material *_material)
{ {
prog = _prog; material = _material;
} }
void RenderObject::render(Camera &camera) void RenderObject::render(Camera &camera)
{ {
auto prog = material->get_program();
glUseProgram(prog); glUseProgram(prog);
auto objectColor = glm::vec3(1.0f, 0.5f, 0.31f); set_uniform_value(prog, "light.position", _lightPos);
set_uniform_value(prog, "objectColor", objectColor);
auto lightColor = glm::vec3(1.0f, 1.0f, 1.0f);
set_uniform_value(prog, "lightColor", lightColor);
set_uniform_value(prog, "lightPos", _lightPos);
set_uniform_value(prog, "viewPos", camera.Position); set_uniform_value(prog, "viewPos", camera.Position);
glm::mat4 projection = glm::perspective(glm::radians(camera.Zoom), (float)_SCR_WIDTH / (float)_SCR_HEIGHT, 0.1f, 100.0f); // light properties
set_uniform_value(prog, "projection", projection); glm::vec3 a = { 0.2f, 0.2f, 0.2f };
glm::vec3 d = { 0.5f, 0.5f, 0.5f };
glm::vec3 f = { 1.0f, 1.0f, 1.0f };
set_uniform_value(prog, "light.ambient", a);
set_uniform_value(prog, "light.diffuse", d);
set_uniform_value(prog, "light.specular", f);
// material properties
set_uniform_value(prog, "material.shininess", glm::fvec1{ 64.0f });
// view/projection transformations
glm::mat4 projection = glm::perspective(glm::radians(camera.Zoom), (float)_SCR_WIDTH / (float)_SCR_HEIGHT, 0.1f, 100.0f);
glm::mat4 view = camera.GetViewMatrix(); glm::mat4 view = camera.GetViewMatrix();
set_uniform_value(prog, "projection", projection);
set_uniform_value(prog, "view", view); set_uniform_value(prog, "view", view);
set_uniform_value(prog, "model", model); set_uniform_value(prog, "model", model);
// bind diffuse map
{
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, material->get_diffuseMap());
}
// bind specular map
{
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, material->get_specularMap());
}
draw_mesh(*mesh); draw_mesh(*mesh);
glUseProgram(0); glUseProgram(0);
......
...@@ -49,8 +49,10 @@ class RenderObject ...@@ -49,8 +49,10 @@ class RenderObject
{ {
private: private:
GLuint id; GLuint id;
GLuint prog;
Mesh *mesh; Mesh *mesh;
Material *material;
glm::mat4 model; glm::mat4 model;
glm::vec3 translate; glm::vec3 translate;
...@@ -62,7 +64,7 @@ private: ...@@ -62,7 +64,7 @@ private:
public: public:
RenderObject(Mesh * _mesh); RenderObject(Mesh * _mesh);
GLuint get_programs(); Material *get_material();
GLuint get_vertex_count(); GLuint get_vertex_count();
glm::mat4 get_model_matrix(); glm::mat4 get_model_matrix();
...@@ -73,7 +75,7 @@ public: ...@@ -73,7 +75,7 @@ public:
void move(glm::vec3 _delta); void move(glm::vec3 _delta);
void move(glm::vec3 _direction, glm::vec1 _velocity); void move(glm::vec3 _direction, glm::vec1 _velocity);
void set_program(GLuint _prog); void set_material(Material *_material);
void render(Camera &camera); void render(Camera &camera);
}; };
......
...@@ -55,17 +55,25 @@ int main() ...@@ -55,17 +55,25 @@ int main()
auto cam_programID = build_program("Camera"); auto cam_programID = build_program("Camera");
auto lighting = build_program("Lighting_Specular"); auto lighting = build_program("Lighting_Specular");
auto lamp = build_program("Lighting_Lamp"); auto lamp = build_program("Lighting_Lamp");
auto lightmap = build_program("Lighting_Maps");
auto texture_shader = build_program("Texture"); auto texture_shader = build_program("Texture");
auto cube = make_mesh("cube.obj"); auto cube = make_mesh("cube.obj");
auto black = load_image("black.png");
auto magenta = load_image("magenta.png");
auto orange = load_image("orange.png");
auto white = load_image("white.png");
auto defaultMaterial = new Material(lightmap, orange, white);
auto teapot = make_render_object(make_mesh("teapot.obj")); auto teapot = make_render_object(make_mesh("teapot.obj"));
{ {
teapot->set_translate(glm::vec3(0.0f, -10.0f, -40.0f)); teapot->set_translate(glm::vec3(0.0f, -10.0f, -40.0f));
teapot->set_rotate(glm::vec3(-90.0f, 0.0f, 0.0f)); teapot->set_rotate(glm::vec3(-90.0f, 0.0f, 0.0f));
} }
{ {
teapot->set_program(lighting); teapot->set_material(defaultMaterial);
} }
auto cube1 = make_render_object(cube); auto cube1 = make_render_object(cube);
...@@ -75,7 +83,7 @@ int main() ...@@ -75,7 +83,7 @@ int main()
cube1->set_scale(glm::vec3(10, 10, 4)); cube1->set_scale(glm::vec3(10, 10, 4));
} }
{ {
cube1->set_program(lighting); cube1->set_material(defaultMaterial);
} }
auto cube2 = make_render_object(cube); auto cube2 = make_render_object(cube);
...@@ -85,7 +93,7 @@ int main() ...@@ -85,7 +93,7 @@ int main()
cube2->set_scale(glm::vec3(12, 12, 1)); cube2->set_scale(glm::vec3(12, 12, 1));
} }
{ {
cube2->set_program(lighting); cube2->set_material(defaultMaterial);
} }
auto plane = make_render_object(make_mesh("plane.obj")); auto plane = make_render_object(make_mesh("plane.obj"));
...@@ -93,7 +101,7 @@ int main() ...@@ -93,7 +101,7 @@ int main()
plane->set_scale(glm::vec3(10, 10, 1)); plane->set_scale(glm::vec3(10, 10, 1));
} }
{ {
plane->set_program(lighting); plane->set_material(defaultMaterial);
} }
auto cube3 = make_render_object(cube); auto cube3 = make_render_object(cube);
...@@ -103,16 +111,18 @@ int main() ...@@ -103,16 +111,18 @@ int main()
cube3->set_scale(glm::vec3(50, 50, 0.5)); cube3->set_scale(glm::vec3(50, 50, 0.5));
} }
{ {
cube3->set_program(lighting); cube3->set_material(defaultMaterial);
} }
GLuint textureID; GLuint diffuseMap = load_image("container2.png");
GLuint specularMap = load_image("container2_specular.png");
{ {
textureID = load_image("container.jpg"); glUseProgram(lightmap);
glUseProgram(texture_shader); set_uniform_value(lightmap, "material.diffuse", glm::ivec1(0));
set_uniform_value(lightmap, "material.specular", glm::ivec1(1));
set_uniform_value(texture_shader, "texture1", glm::ivec1(0)); glUseProgram(lightmap);
} }
while (!glfwWindowShouldClose(window)) while (!glfwWindowShouldClose(window))
...@@ -130,7 +140,7 @@ int main() ...@@ -130,7 +140,7 @@ int main()
glUseProgram(texture_shader); glUseProgram(texture_shader);
glActiveTexture(GL_TEXTURE0); glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, textureID); glBindTexture(GL_TEXTURE_2D, diffuseMap);
glUseProgram(0); glUseProgram(0);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment