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

Make Transform class.

parent 3c8c1d7e
No related branches found
No related tags found
No related merge requests found
...@@ -61,14 +61,8 @@ GLuint Material::get_specularMap() ...@@ -61,14 +61,8 @@ GLuint Material::get_specularMap()
RenderObject::RenderObject(Mesh * _mesh) RenderObject::RenderObject(Mesh * _mesh)
{ {
translate = glm::vec3(0.0f, 0.0f, 0.0f); transform = Transform();
rotate = glm::vec3(0.0f, 0.0f, 0.0f);
scale = glm::vec3(1.0f, 1.0f, 1.0f);
mesh = _mesh; mesh = _mesh;
update_model_matrix();
update_directional_vector();
} }
Material *RenderObject::get_material() Material *RenderObject::get_material()
...@@ -81,12 +75,22 @@ GLuint RenderObject::get_vertex_count() ...@@ -81,12 +75,22 @@ GLuint RenderObject::get_vertex_count()
return mesh->get_vertex_count(); return mesh->get_vertex_count();
} }
glm::mat4 RenderObject::get_model_matrix() Transform::Transform()
{
translate = glm::vec3(0.0f, 0.0f, 0.0f);
rotate = glm::vec3(0.0f, 0.0f, 0.0f);
scale = glm::vec3(1.0f, 1.0f, 1.0f);
update_model_matrix();
update_directional_vector();
}
glm::mat4 Transform::get_model_matrix()
{ {
return model; return model;
} }
void RenderObject::update_model_matrix() void Transform::update_model_matrix()
{ {
model = glm::mat4(1.0f); model = glm::mat4(1.0f);
model = glm::translate(model, translate); model = glm::translate(model, translate);
...@@ -98,7 +102,7 @@ void RenderObject::update_model_matrix() ...@@ -98,7 +102,7 @@ void RenderObject::update_model_matrix()
model = glm::scale(model, scale); model = glm::scale(model, scale);
} }
void RenderObject::update_directional_vector() void Transform::update_directional_vector()
{ {
glm::vec3 front; glm::vec3 front;
glm::vec3 up; glm::vec3 up;
...@@ -115,7 +119,12 @@ void RenderObject::update_directional_vector() ...@@ -115,7 +119,12 @@ void RenderObject::update_directional_vector()
up = glm::normalize(glm::cross(right, front)); up = glm::normalize(glm::cross(right, front));
} }
void RenderObject::set_translate(glm::vec3 _translate) Transform *RenderObject::get_transform()
{
return &transform;
}
void Transform::set_translate(glm::vec3 _translate)
{ {
translate = _translate; translate = _translate;
...@@ -123,7 +132,7 @@ void RenderObject::set_translate(glm::vec3 _translate) ...@@ -123,7 +132,7 @@ void RenderObject::set_translate(glm::vec3 _translate)
update_directional_vector(); update_directional_vector();
} }
void RenderObject::set_rotate(glm::vec3 _rotate) void Transform::set_rotate(glm::vec3 _rotate)
{ {
rotate = _rotate; rotate = _rotate;
...@@ -131,14 +140,14 @@ void RenderObject::set_rotate(glm::vec3 _rotate) ...@@ -131,14 +140,14 @@ void RenderObject::set_rotate(glm::vec3 _rotate)
update_directional_vector(); update_directional_vector();
} }
void RenderObject::set_scale(glm::vec3 _scale) void Transform::set_scale(glm::vec3 _scale)
{ {
scale = _scale; scale = _scale;
update_model_matrix(); update_model_matrix();
} }
void RenderObject::move(glm::vec3 _delta) void Transform::move(glm::vec3 _delta)
{ {
translate += _delta; translate += _delta;
...@@ -146,7 +155,7 @@ void RenderObject::move(glm::vec3 _delta) ...@@ -146,7 +155,7 @@ void RenderObject::move(glm::vec3 _delta)
update_directional_vector(); update_directional_vector();
} }
void RenderObject::move(glm::vec3 _direction, glm::vec1 _velocity) void Transform::move(glm::vec3 _direction, glm::vec1 _velocity)
{ {
translate += glm::vec3(_velocity *_direction.x, _velocity *_direction.y, _velocity *_direction.z); translate += glm::vec3(_velocity *_direction.x, _velocity *_direction.y, _velocity *_direction.z);
...@@ -177,6 +186,8 @@ void RenderObject::render(Camera &camera) ...@@ -177,6 +186,8 @@ void RenderObject::render(Camera &camera)
glm::mat4 projection = glm::perspective(glm::radians(camera.Zoom), (float)_SCR_WIDTH / (float)_SCR_HEIGHT, 0.1f, 500.0f); glm::mat4 projection = glm::perspective(glm::radians(camera.Zoom), (float)_SCR_WIDTH / (float)_SCR_HEIGHT, 0.1f, 500.0f);
glm::mat4 view = camera.GetViewMatrix(); glm::mat4 view = camera.GetViewMatrix();
glm::mat4 model = transform.get_model_matrix();
set_uniform_value(prog, "projection", projection); 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);
...@@ -223,6 +234,7 @@ void RenderObject::projective_render(Camera &camera) ...@@ -223,6 +234,7 @@ void RenderObject::projective_render(Camera &camera)
glm::mat4 projection = glm::perspective(glm::radians(camera.Zoom), (float)_SCR_WIDTH / (float)_SCR_HEIGHT, 0.1f, 500.0f); glm::mat4 projection = glm::perspective(glm::radians(camera.Zoom), (float)_SCR_WIDTH / (float)_SCR_HEIGHT, 0.1f, 500.0f);
glm::mat4 view = camera.GetViewMatrix(); glm::mat4 view = camera.GetViewMatrix();
glm::mat4 model = transform.get_model_matrix();
set_uniform_value(prog, "projectorBias", bias); set_uniform_value(prog, "projectorBias", bias);
set_uniform_value(prog, "projectorProjection", projector_projection); set_uniform_value(prog, "projectorProjection", projector_projection);
...@@ -260,7 +272,7 @@ RenderObject *make_render_object(Mesh *mesh) ...@@ -260,7 +272,7 @@ RenderObject *make_render_object(Mesh *mesh)
RenderObject *ro = new RenderObject(mesh); RenderObject *ro = new RenderObject(mesh);
return ro; return ro;
}; }
GLuint build_program(const std::string name) GLuint build_program(const std::string name)
{ {
......
...@@ -50,14 +50,9 @@ public: ...@@ -50,14 +50,9 @@ public:
GLuint get_specularMap(); GLuint get_specularMap();
}; };
class RenderObject class Transform
{ {
private: private:
GLuint id;
Mesh *mesh;
Material *material;
glm::mat4 model; glm::mat4 model;
glm::vec3 translate; glm::vec3 translate;
...@@ -72,10 +67,7 @@ private: ...@@ -72,10 +67,7 @@ private:
void update_directional_vector(); void update_directional_vector();
public: public:
RenderObject(Mesh * _mesh); Transform();
Material *get_material();
GLuint get_vertex_count();
glm::mat4 get_model_matrix(); glm::mat4 get_model_matrix();
glm::vec3 get_front(); glm::vec3 get_front();
...@@ -85,6 +77,23 @@ public: ...@@ -85,6 +77,23 @@ 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);
};
class RenderObject
{
private:
GLuint id;
Transform transform;
Mesh *mesh;
Material *material;
public:
RenderObject(Mesh * _mesh);
Transform *get_transform();
Material *get_material();
GLuint get_vertex_count();
void set_material(Material *_material); void set_material(Material *_material);
......
...@@ -77,18 +77,11 @@ int main() ...@@ -77,18 +77,11 @@ int main()
auto planeMaterial = new Material(lightmap, magenta, transparent); auto planeMaterial = new Material(lightmap, magenta, transparent);
auto projectorMaterial = new Material(projector_shader, wall_tex, wall); auto projectorMaterial = new Material(projector_shader, wall_tex, wall);
auto projector = make_render_object(cube);
{
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"));
{ {
teapot->set_translate(glm::vec3(0.0f, -10.0f, -40.0f)); auto transform = teapot->get_transform();
teapot->set_rotate(glm::vec3(-90.0f, 0.0f, 0.0f)); transform->set_translate(glm::vec3(0.0f, -10.0f, -40.0f));
transform->set_rotate(glm::vec3(-90.0f, 0.0f, 0.0f));
} }
{ {
teapot->set_material(projectorMaterial); teapot->set_material(projectorMaterial);
...@@ -96,9 +89,10 @@ int main() ...@@ -96,9 +89,10 @@ int main()
auto cube1 = make_render_object(cube); auto cube1 = make_render_object(cube);
{ {
cube1->set_translate(glm::vec3(0, -15, -40)); auto transform = cube1->get_transform();
cube1->set_rotate(glm::vec3(-90.0f, 0.0f, 0.0f)); transform->set_translate(glm::vec3(0, -15, -40));
cube1->set_scale(glm::vec3(10, 10, 4)); transform->set_rotate(glm::vec3(-90.0f, 0.0f, 0.0f));
transform->set_scale(glm::vec3(10, 10, 4));
} }
{ {
cube1->set_material(cubeMaterial); cube1->set_material(cubeMaterial);
...@@ -106,9 +100,10 @@ int main() ...@@ -106,9 +100,10 @@ int main()
auto cube2 = make_render_object(cube); auto cube2 = make_render_object(cube);
{ {
cube2->set_translate(glm::vec3(0, -10, -40)); auto transform = cube2->get_transform();
cube1->set_rotate(glm::vec3(-90.0f, 0.0f, 0.0f)); transform->set_translate(glm::vec3(0, -10, -40));
cube2->set_scale(glm::vec3(12, 12, 1)); transform->set_rotate(glm::vec3(-90.0f, 0.0f, 0.0f));
transform->set_scale(glm::vec3(12, 12, 1));
} }
{ {
cube2->set_material(cubeMaterial); cube2->set_material(cubeMaterial);
...@@ -116,7 +111,8 @@ int main() ...@@ -116,7 +111,8 @@ int main()
auto plane = make_render_object(make_mesh("plane.obj")); auto plane = make_render_object(make_mesh("plane.obj"));
{ {
plane->set_scale(glm::vec3(10, 10, 1)); auto transform = plane->get_transform();
transform->set_scale(glm::vec3(10, 10, 1));
} }
{ {
plane->set_material(planeMaterial); plane->set_material(planeMaterial);
...@@ -124,9 +120,10 @@ int main() ...@@ -124,9 +120,10 @@ int main()
auto cube3 = make_render_object(cube); auto cube3 = make_render_object(cube);
{ {
cube3->set_translate(glm::vec3(0.0f, -20.0f, -40.0f)); auto transform = cube3->get_transform();
cube3->set_rotate(glm::vec3(-90.0f, 0.0f, 0.0f)); transform->set_translate(glm::vec3(0.0f, -20.0f, -40.0f));
cube3->set_scale(glm::vec3(50, 50, 0.5)); transform->set_rotate(glm::vec3(-90.0f, 0.0f, 0.0f));
transform->set_scale(glm::vec3(50, 50, 0.5));
} }
{ {
cube3->set_material(cubeMaterial); cube3->set_material(cubeMaterial);
...@@ -134,7 +131,8 @@ int main() ...@@ -134,7 +131,8 @@ int main()
auto cube4 = make_render_object(cube); auto cube4 = make_render_object(cube);
{ {
cube4->set_translate(glm::vec3(0.0f, 10.0f, 0.0f)); auto transform = cube4->get_transform();
transform->set_translate(glm::vec3(0.0f, 10.0f, 0.0f));
} }
{ {
cube4->set_material(cubeMaterial); cube4->set_material(cubeMaterial);
...@@ -153,11 +151,11 @@ int main() ...@@ -153,11 +151,11 @@ int main()
{ {
teapot->projective_render(camera); teapot->projective_render(camera);
cube1->render(camera); cube1->projective_render(camera);
cube2->render(camera); cube2->projective_render(camera);
cube3->render(camera); cube3->projective_render(camera);
plane->render(camera); plane->projective_render(camera);
cube4->render(camera); cube4->projective_render(camera);
} }
glfwSwapBuffers(window); glfwSwapBuffers(window);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment