#pragma once #include #include #include using namespace std; class WorldInstanceable { private: glm::vec3 localFront, localUp; void setup(glm::vec3 position); public: glm::mat4 scaleMat; glm::mat4 rotation; glm::vec3 position; WorldInstanceable(glm::vec3 position); WorldInstanceable(glm::vec3 position, glm::vec3 scale); WorldInstanceable(glm::vec3 position, glm::vec3 axis, float angle); WorldInstanceable(glm::vec3 position, glm::vec3 scale, glm::vec3 axis, float angle); void setPosition(glm::vec3 position); void rotate(glm::vec3 axis, float angle); void scale(float factor); void scale(glm::vec3 factors); glm::mat4 getLocalTransform(); glm::mat4 getGlobalTransform(); void alignTo(glm::vec3 direction); };