A small OpenGL 3+ renderer and game engine
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

94 lines
1.4 KiB

#include <cassert>
#include <glm/gtc/matrix_transform.hpp>
#include "dumbLog.h"
#include "entity.h"
#include "util.h"
// forward declarations
void initDefaults(entity& e);
// interface
#if 0
bool
entInitModel(entity& e, const char* model_path)
{
initDefaults(e);
if (meLoadFromFile(e.meshes, model_path))
{
e.render_objs = roInitModel(e.meshes);
if (e.render_objs != nullptr)
return true;
}
entFree(e);
return false;
}
#endif
bool
entInitModel(entity* e, model* mdl)
{
e->render_objs = roInitModel(mdl);
e->world_transform = glm::mat4(1);
e->model_id = mdl->filepath_hash;
if (e->render_objs == nullptr) {
entFree(e);
return false;
}
return true;
}
void
entFree(entity* e)
{
roFree(e->render_objs);
e->render_objs = nullptr;
}
void
entSetWorldPosition(entity& e, glm::vec3 v)
{
e.world_transform[3][0] = v.x;
e.world_transform[3][1] = v.y;
e.world_transform[3][2] = v.z;
}
void
entTranslate(entity& e, glm::vec3 v)
{
e.world_transform = glm::translate(e.world_transform, v);
}
void
entScale(entity& e, glm::vec3 v)
{
e.world_transform = glm::scale(e.world_transform, v);
}
void
entRotate(entity*& e, float angle, glm::vec3 axis)
{
e->world_transform = glm::rotate(e->world_transform, angle, axis);
}
// internal
void
initDefaults(entity& e)
{
e.world_transform = glm::mat4(1.0);
entScale(e, glm::vec3(1.0));
entSetWorldPosition(e, glm::vec3(0, 0, 0));
}