work on object system
This commit is contained in:
30
src/include/utils/Objects/Body.h
Normal file
30
src/include/utils/Objects/Body.h
Normal file
@@ -0,0 +1,30 @@
|
||||
#ifndef BODY_H
|
||||
#define BODY_H
|
||||
|
||||
#include "pch.hpp"
|
||||
|
||||
#include "extratools.h"
|
||||
|
||||
#include "Object.h"
|
||||
|
||||
namespace Archimedes {
|
||||
|
||||
class Body : public Object {
|
||||
|
||||
public:
|
||||
Body(RenderTarget rt, glm::mat4 t = glm::mat4(1.0f)) : mesh(rt), Object(t) {};
|
||||
|
||||
Body(VertexBuffer vb, IndexArray ia, VertexLayout vl, Shader s, glm::mat4 t = glm::mat4(1.0f))
|
||||
: mesh(vb, ia, vl, s), Object(t) {}
|
||||
|
||||
Body() {}
|
||||
|
||||
~Body() {};
|
||||
|
||||
private:
|
||||
|
||||
RenderTarget mesh;
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
||||
25
src/include/utils/Objects/Camera.h
Normal file
25
src/include/utils/Objects/Camera.h
Normal file
@@ -0,0 +1,25 @@
|
||||
#ifndef CAMERA_H
|
||||
#define CAMERA_H
|
||||
|
||||
#include "pch.hpp"
|
||||
|
||||
#include "extratools.h"
|
||||
|
||||
#include "Object.h"
|
||||
|
||||
namespace Archimedes {
|
||||
|
||||
class Camera : public Object {
|
||||
|
||||
public:
|
||||
Camera() {}
|
||||
|
||||
Camera(glm::mat4 t)
|
||||
: Object(t) {}
|
||||
|
||||
~Camera() {};
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -12,24 +12,25 @@ namespace Archimedes {
|
||||
class Object {
|
||||
|
||||
public:
|
||||
Object(RenderTarget rt) : mesh(rt) {};
|
||||
|
||||
Object(VertexBuffer vb, IndexArray ia, VertexLayout vl, Shader s, glm::mat4 t)
|
||||
: mesh(vb, ia, vl, s), worldTransform(t) {}
|
||||
Object() {};
|
||||
|
||||
Object() {}
|
||||
Object(glm::mat4 t)
|
||||
: worldTransform(t) {}
|
||||
|
||||
~Object() {};
|
||||
|
||||
///scales an object absolutely
|
||||
void scaleTo() {}
|
||||
void scaleRel() {}
|
||||
//void scaleTo() {}
|
||||
void scaleRel(float scale) { worldTransform = glm::scale(worldTransform, glm::vec3(scale)); }
|
||||
|
||||
void moveTo() {}
|
||||
void moveRel() {}
|
||||
//void moveTo(glm::vec3 pos) { worldTransform = glm::translate(worldTransform, pos); }
|
||||
void moveRel(glm::vec3 pos) { worldTransform = glm::translate(worldTransform, pos); }
|
||||
|
||||
void rotateTo() {}
|
||||
void rotateRel() {}
|
||||
//void rotateTo() {}
|
||||
void rotateRel(float radians, glm::vec3 axis) { worldTransform = glm::rotate(worldTransform, radians, axis); }
|
||||
|
||||
const glm::mat4& getTransform() { return worldTransform; }
|
||||
|
||||
private:
|
||||
|
||||
@@ -38,8 +39,6 @@ namespace Archimedes {
|
||||
|
||||
glm::mat4 worldTransform = glm::mat4(1.0f);
|
||||
|
||||
RenderTarget mesh;
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -16,6 +16,8 @@ namespace Archimedes {
|
||||
enum class RenderMode {
|
||||
Triangles,
|
||||
Lines,
|
||||
ConnectedLines,
|
||||
ConnectedLinesLooped,
|
||||
Points
|
||||
};
|
||||
|
||||
@@ -42,9 +44,13 @@ namespace Archimedes {
|
||||
Shader& s
|
||||
) = 0;
|
||||
|
||||
virtual void useRenderTarget(RenderTarget& rt) = 0;
|
||||
virtual void setupRenderTarget(RenderTarget& rt) = 0;
|
||||
|
||||
virtual void draw(const RenderTarget& rt, RenderMode mode = RenderMode::Triangles) = 0;
|
||||
virtual void updateRenderTarget(RenderTarget& rt) = 0;
|
||||
|
||||
virtual void freeRenderTarget(RenderTarget& rt) = 0;
|
||||
|
||||
virtual void draw(const RenderTarget& rt, glm::vec4 color = { 1.0f, 0.0f, 1.0f, 1.0f }, RenderMode mode = RenderMode::Triangles) = 0;
|
||||
|
||||
virtual Renderer* getRendererImpl() = 0;
|
||||
|
||||
|
||||
@@ -173,27 +173,28 @@ namespace Archimedes {
|
||||
return rt;
|
||||
};
|
||||
|
||||
|
||||
void useRenderTarget(RenderTarget& rt) override {
|
||||
void setupRenderTarget(RenderTarget& rt) override {
|
||||
|
||||
glGenVertexArrays(1, &rt.vertexArray.id);
|
||||
|
||||
glGenBuffers(1, &rt.vertexBuffer.id);
|
||||
|
||||
glGenBuffers(1, &rt.indexArray.id);
|
||||
|
||||
updateRenderTarget(rt);
|
||||
};
|
||||
|
||||
void updateRenderTarget(RenderTarget& rt) override {
|
||||
|
||||
glBindVertexArray(rt.vertexArray.id);
|
||||
|
||||
glBindBuffer(GL_ARRAY_BUFFER, rt.vertexBuffer.id);
|
||||
glBufferData(GL_ARRAY_BUFFER, rt.vertexBuffer.getSize(), rt.vertexBuffer.getData(), GL_STATIC_DRAW);
|
||||
|
||||
|
||||
glGenBuffers(1, &rt.indexArray.id);
|
||||
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, rt.indexArray.id);
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, rt.indexArray.getCount() * sizeof(unsigned int), rt.indexArray.getIndicies(), GL_STATIC_DRAW);
|
||||
|
||||
|
||||
glUseProgram(rt.shader.id);
|
||||
|
||||
|
||||
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
|
||||
glEnableVertexAttribArray(0);
|
||||
@@ -203,7 +204,14 @@ namespace Archimedes {
|
||||
|
||||
};
|
||||
|
||||
void draw(const RenderTarget& rt, RenderMode mode) override {
|
||||
void freeRenderTarget(RenderTarget& rt) override {
|
||||
|
||||
glDeleteVertexArrays(1, &rt.vertexArray.id);
|
||||
glDeleteBuffers(1, &rt.vertexBuffer.id);
|
||||
glDeleteBuffers(1, &rt.indexArray.id);
|
||||
};
|
||||
|
||||
void draw(const RenderTarget& rt, glm::vec4 color = { 1.0f, 0.0f, 1.0f, 1.0f }, RenderMode mode = RenderMode::Triangles) override {
|
||||
|
||||
glUseProgram(rt.shader.id);
|
||||
|
||||
@@ -214,18 +222,27 @@ namespace Archimedes {
|
||||
unsigned int resLoc = glGetUniformLocation(rt.shader.id, "res");
|
||||
glUniform2ui(resLoc, w, h);
|
||||
|
||||
unsigned int ccLoc = glGetUniformLocation(rt.shader.id, "clearColor");
|
||||
glUniform4f(ccLoc, clearColor.r, clearColor.g, clearColor.b, clearColor.a);
|
||||
unsigned int colorLoc = glGetUniformLocation(rt.shader.id, "color");
|
||||
glUniform4f(colorLoc, color.r, color.g, color.b, color.a);
|
||||
|
||||
glBindVertexArray(rt.vertexArray.id);
|
||||
|
||||
switch(mode) {
|
||||
case RenderMode::Triangles:
|
||||
glDrawElements(GL_TRIANGLES, rt.indexArray.getCount(), GL_UNSIGNED_INT, nullptr);
|
||||
break;
|
||||
case RenderMode::Lines:
|
||||
glDrawElements(GL_LINES, rt.indexArray.getCount(), GL_UNSIGNED_INT, nullptr);
|
||||
break;
|
||||
case RenderMode::ConnectedLines:
|
||||
glDrawElements(GL_LINE_STRIP, rt.indexArray.getCount(), GL_UNSIGNED_INT, nullptr);
|
||||
break;
|
||||
case RenderMode::ConnectedLinesLooped:
|
||||
glDrawElements(GL_LINE_LOOP, rt.indexArray.getCount(), GL_UNSIGNED_INT, nullptr);
|
||||
break;
|
||||
case RenderMode::Points:
|
||||
glDrawElements(GL_POINTS, rt.indexArray.getCount(), GL_UNSIGNED_INT, nullptr);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user