50 lines
No EOL
1.5 KiB
C++
50 lines
No EOL
1.5 KiB
C++
#include <myEngine/model.hpp>
|
|
|
|
#include <glm/glm.hpp>
|
|
#include <glm/gtc/matrix_transform.hpp>
|
|
|
|
class Object {
|
|
public:
|
|
Model& model;
|
|
glm::vec3 position;
|
|
glm::vec3 scale;
|
|
glm::vec3 rotation;
|
|
glm::vec3 acceleration;
|
|
|
|
Object(Model &model, glm::vec3 position, glm::vec3 scale, glm::vec3 rotation) : model(model), position(position), scale(scale), rotation(rotation) {}
|
|
|
|
glm::mat4 getModelMatrix() const {
|
|
glm::mat4 model = glm::mat4(1.0f);
|
|
model = glm::translate(model, position);
|
|
model = glm::scale(model, scale);
|
|
model = glm::rotate(model, glm::radians(rotation.x), glm::vec3(1.0f, 0.0f, 0.0f));
|
|
model = glm::rotate(model, glm::radians(rotation.y), glm::vec3(0.0f, 1.0f, 0.0f));
|
|
model = glm::rotate(model, glm::radians(rotation.z), glm::vec3(0.0f, 0.0f, 1.0f));
|
|
return model;
|
|
}
|
|
|
|
void setPosition(const glm::vec3 &newPosition) {
|
|
position = newPosition;
|
|
}
|
|
|
|
void setScale(const glm::vec3 &newScale) {
|
|
scale = newScale;
|
|
}
|
|
|
|
void setRotation(const glm::vec3 &newRotation) {
|
|
rotation = newRotation;
|
|
}
|
|
|
|
void setAcceleration(const glm::vec3 &newAcceleration) {
|
|
acceleration = newAcceleration;
|
|
}
|
|
|
|
void Draw(Shader &shader, float deltaTime) {
|
|
position += acceleration * deltaTime;
|
|
acceleration = glm::vec3(0.0f, 0.0f, 0.0f);
|
|
|
|
glm::mat4 modelMatrix = getModelMatrix();
|
|
shader.setMat4("model", modelMatrix);
|
|
model.Draw(shader);
|
|
}
|
|
}; |