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

Make Transform class.

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