Basic transform stuff
This commit is contained in:
69
src/dawn/display/Transform.hpp
Normal file
69
src/dawn/display/Transform.hpp
Normal file
@ -0,0 +1,69 @@
|
||||
// Copyright (c) 2022 Dominic Masters
|
||||
//
|
||||
// This software is released under the MIT License.
|
||||
// https://opensource.org/licenses/MIT
|
||||
|
||||
#pragma once
|
||||
#include "dawnlibs.hpp"
|
||||
#include "util/flag.hpp"
|
||||
|
||||
namespace Dawn {
|
||||
class SceneItem;
|
||||
|
||||
class Transform : public std::enable_shared_from_this<Transform> {
|
||||
private:
|
||||
// Local (real) values
|
||||
glm::vec3 localPosition;
|
||||
glm::vec3 localScale;
|
||||
glm::quat localRotation;
|
||||
|
||||
// Cached (non-real) values
|
||||
glm::mat4 transformLocal;
|
||||
glm::mat4 transformWorld;
|
||||
|
||||
glm::vec3 position;
|
||||
glm::vec3 scale;
|
||||
glm::quat rotation;
|
||||
|
||||
// Heirarchy
|
||||
Transform *parent = nullptr;
|
||||
std::vector<Transform *> children;
|
||||
|
||||
// Hidden methods
|
||||
void updateLocalValuesFromLocalTransform();
|
||||
void updateLocalTransformFromLocalValues();
|
||||
void updateWorldTransformFromLocalTransform();
|
||||
void updateLocalTransformFromWorldTransform();
|
||||
void updateChildrenTransforms();
|
||||
|
||||
public:
|
||||
SceneItem &item;
|
||||
|
||||
Transform(SceneItem &item);
|
||||
|
||||
void lookAt(glm::vec3 position, glm::vec3 look);
|
||||
void lookAt(glm::vec3 position, glm::vec3 look, glm::vec3 up);
|
||||
|
||||
glm::vec3 getLocalPosition();
|
||||
void setLocalPosition(glm::vec3 position);
|
||||
|
||||
glm::vec3 getLocalScale();
|
||||
void setLocalScale(glm::vec3 scale);
|
||||
|
||||
glm::quat getLocalRotation();
|
||||
void setLocalRotation(glm::quat rotation);
|
||||
|
||||
|
||||
glm::mat4 getLocalTransform();
|
||||
void setLocalTransform(glm::mat4 transform);
|
||||
|
||||
glm::mat4 getWorldTransform();
|
||||
void setWorldTransform(glm::mat4 transform);
|
||||
|
||||
|
||||
void setParent(Transform *p);
|
||||
Transform * getParent();
|
||||
|
||||
~Transform();
|
||||
};
|
||||
}
|
Reference in New Issue
Block a user