Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma once
- #include "Common.h"
- struct Transform
- {
- public:
- void Translate(float x, float y, float z);
- void Translate(const glm::vec3 &dir);
- void SetPosition(const glm::vec3 &pos);
- void Rotate(float x, float y, float z);
- void SetRotation(const glm::vec3 &rot);
- const glm::vec3& GetPosition();
- const glm::vec3& GetRotation();
- void LookAt(glm::vec3 targetPosition);
- glm::vec3 Up() const;
- glm::vec3 Right() const;
- glm::vec3 Forward() const;
- glm::mat4 GetOrientation() const;
- void NormalizeAngles();
- private:
- glm::vec3 m_Position, m_Rotation;
- };
- inline void Transform::SetPosition(const glm::vec3 &pos)
- {
- m_Position = pos;
- }
- inline void Transform::Translate(float x, float y, float z)
- {
- m_Position += glm::vec3(x,y,z);
- }
- inline void Transform::Translate(const glm::vec3 &dir)
- {
- m_Position += dir;
- }
- inline void Transform::SetRotation(const glm::vec3 &rot)
- {
- m_Rotation = rot;
- }
- inline void Transform::Rotate(float x, float y, float z)
- {
- m_Rotation += glm::vec3(x,y,z);
- }
- inline const glm::vec3& Transform::GetPosition()
- {
- return m_Position;
- }
- inline glm::vec3 Transform::Forward() const {
- glm::vec4 forward = glm::inverse(GetOrientation()) * glm::vec4(0,0,-1,1);
- return glm::vec3(forward);
- }
- inline glm::vec3 Transform::Right() const {
- glm::vec4 right = glm::inverse(GetOrientation()) * glm::vec4(1,0,0,1);
- return glm::vec3(right);
- }
- inline glm::vec3 Transform::Up() const {
- glm::vec4 up = glm::inverse(GetOrientation()) * glm::vec4(0,1,0,1);
- return glm::vec3(up);
- }
- inline const glm::vec3& Transform::GetRotation()
- {
- return m_Rotation;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement