Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "tango-gl/transform.h"
00018 #include "tango-gl/util.h"
00019
00020 #define nullptr 0
00021
00022 namespace tango_gl {
00023
00024 Transform::Transform()
00025 : parent_(nullptr),
00026 position_(0.0f, 0.0f, 0.0f),
00027 rotation_(1.0f, 0.0f, 0.0f, 0.0f),
00028 scale_(1.0f, 1.0f, 1.0f) {
00029 }
00030
00031 Transform::~Transform() {
00032
00033 }
00034
00035 void Transform::SetPosition(const glm::vec3& position) {
00036 position_ = position;
00037 }
00038
00039 glm::vec3 Transform::GetPosition() const {
00040 return position_;
00041 }
00042
00043 void Transform::SetRotation(const glm::quat& rotation) {
00044 rotation_ = rotation;
00045 }
00046
00047 glm::quat Transform::GetRotation() const {
00048 return rotation_;
00049 }
00050
00051 void Transform::SetScale(const glm::vec3& scale) {
00052 scale_ = scale;
00053 }
00054
00055 glm::vec3 Transform::GetScale() const {
00056 return scale_;
00057 }
00058
00059 void Transform::Translate(const glm::vec3& translation) {
00060 position_ += translation;
00061 }
00062
00063 void Transform::SetTransformationMatrix(const glm::mat4& transform_mat) {
00064 util::DecomposeMatrix(transform_mat, position_, rotation_, scale_);
00065 }
00066
00067 glm::mat4 Transform::GetTransformationMatrix() const {
00068 glm::mat4 trans_mat = glm::scale(glm::mat4_cast(rotation_), scale_);
00069 trans_mat[3][0] = position_.x;
00070 trans_mat[3][1] = position_.y;
00071 trans_mat[3][2] = position_.z;
00072 glm::mat4 parent_mat = glm::mat4(1.0f);
00073 if (parent_ != NULL) {
00074 parent_mat = parent_->GetTransformationMatrix();
00075 trans_mat = parent_mat * trans_mat;
00076 }
00077 return trans_mat;
00078 }
00079
00080 void Transform::SetParent(Transform* transform) {
00081 parent_ = transform;
00082 }
00083
00084 const Transform* Transform::GetParent() const {
00085 return parent_;
00086 }
00087
00088 Transform* Transform::GetParent() {
00089 return parent_;
00090 }
00091
00092 }