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

projective mapping 적용중

parent 3cdddf08
Branches
No related tags found
No related merge requests found
...@@ -175,6 +175,39 @@ void RenderObject::render(Camera &camera) ...@@ -175,6 +175,39 @@ void RenderObject::render(Camera &camera)
glUseProgram(0); glUseProgram(0);
} }
void RenderObject::projective_render(Camera &camera)
{
const glm::mat4 bias = { 0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 1.0 };
glm::mat4 pp = glm::perspective(glm::radians(camera.Zoom), (float)_SCR_WIDTH / (float)_SCR_HEIGHT, 0.1f, 10.0f);
glm::mat4 pv = glm::lookAt(camera.Position, camera.Position + camera.Front, camera.Up);
glm::mat4 InvView = glm::inverse(camera.GetViewMatrix());
glm::mat4 result = bias * pp * pv;
auto prog = material->get_program();
glUseProgram(prog);
glm::mat4 projection = glm::perspective(glm::radians(camera.Zoom), (float)_SCR_WIDTH / (float)_SCR_HEIGHT, 0.1f, 500.0f);
glm::mat4 view = camera.GetViewMatrix();
set_uniform_value(prog, "TexGenMatCam0", result);
set_uniform_value(prog, "projection", projection);
set_uniform_value(prog, "view", view);
set_uniform_value(prog, "model", model);
{
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, material->get_diffuseMap());
}
{
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, material->get_specularMap());
}
draw_mesh(*mesh);
glUseProgram(0);
}
RenderObject *make_render_object(Mesh *mesh) RenderObject *make_render_object(Mesh *mesh)
{ {
RenderObject *ro = new RenderObject(mesh); RenderObject *ro = new RenderObject(mesh);
......
...@@ -77,6 +77,7 @@ public: ...@@ -77,6 +77,7 @@ public:
void set_material(Material *_material); void set_material(Material *_material);
void render(Camera &camera); void render(Camera &camera);
void projective_render(Camera &camera);
}; };
RenderObject *make_render_object(Mesh *mesh); RenderObject *make_render_object(Mesh *mesh);
......
...@@ -57,6 +57,7 @@ int main() ...@@ -57,6 +57,7 @@ int main()
auto lamp = build_program("Lighting_Lamp"); auto lamp = build_program("Lighting_Lamp");
auto lightmap = build_program("Lighting_Maps"); auto lightmap = build_program("Lighting_Maps");
auto texture_shader = build_program("Texture"); auto texture_shader = build_program("Texture");
auto projector_shader = build_program("Projector");
auto cube = make_mesh("cube.obj"); auto cube = make_mesh("cube.obj");
...@@ -66,12 +67,22 @@ int main() ...@@ -66,12 +67,22 @@ int main()
auto white = load_image("white.png"); auto white = load_image("white.png");
auto transparent = load_image("transparent.png"); auto transparent = load_image("transparent.png");
auto wall = load_image("wall.jpg");
auto container_diffuse = load_image("container2.png"); auto container_diffuse = load_image("container2.png");
auto container_specular = load_image("container2_specular.png"); auto container_specular = load_image("container2_specular.png");
auto defaultMaterial = new Material(lightmap, orange, transparent); auto defaultMaterial = new Material(lightmap, orange, transparent);
auto cubeMaterial = new Material(lightmap, container_diffuse, container_specular); auto cubeMaterial = new Material(lightmap, container_diffuse, container_specular);
auto planeMaterial = new Material(lightmap, magenta, transparent); auto planeMaterial = new Material(lightmap, magenta, transparent);
auto projectorMaterial = new Material(projector_shader, transparent, transparent);
auto projector = make_render_object(make_mesh("cube.obj"));
{
projector->set_translate(glm::vec3(0.0f, 10.0f, 0.0f));
}
{
projector->set_material(projectorMaterial);
}
auto teapot = make_render_object(make_mesh("teapot.obj")); auto teapot = make_render_object(make_mesh("teapot.obj"));
{ {
...@@ -79,7 +90,7 @@ int main() ...@@ -79,7 +90,7 @@ int main()
teapot->set_rotate(glm::vec3(-90.0f, 0.0f, 0.0f)); teapot->set_rotate(glm::vec3(-90.0f, 0.0f, 0.0f));
} }
{ {
teapot->set_material(defaultMaterial); teapot->set_material(projectorMaterial);
} }
auto cube1 = make_render_object(cube); auto cube1 = make_render_object(cube);
...@@ -140,7 +151,7 @@ int main() ...@@ -140,7 +151,7 @@ int main()
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
{ {
teapot->render(camera); teapot->projective_render(camera);
cube1->render(camera); cube1->render(camera);
cube2->render(camera); cube2->render(camera);
cube3->render(camera); cube3->render(camera);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment