parent
ede8465a9b
commit
d3bd172d96
@ -0,0 +1,33 @@
|
||||
//
|
||||
// Created by Wouter Groeneveld on 11/07/20.
|
||||
//
|
||||
|
||||
#ifndef GBA_BITMAP_ENGINE_PROJECT_RENDERER_H
|
||||
#define GBA_BITMAP_ENGINE_PROJECT_RENDERER_H
|
||||
|
||||
#include <libgba-sprite-engine/matrixfx.h>
|
||||
#include <libgba-sprite-engine/mesh.h>
|
||||
|
||||
class GBAEngine;
|
||||
|
||||
class Renderer {
|
||||
protected:
|
||||
std::shared_ptr<GBAEngine> engine;
|
||||
|
||||
public:
|
||||
virtual void render(const MatrixFx &transformationMatrix, const Mesh* mesh) = 0;
|
||||
};
|
||||
|
||||
class PixelRenderer : public Renderer {
|
||||
public:
|
||||
void render(const MatrixFx &transformationMatrix, const Mesh* mesh) override;
|
||||
|
||||
};
|
||||
|
||||
class WiredRenderer : public Renderer {
|
||||
public:
|
||||
void render(const MatrixFx &transformationMatrix, const Mesh* mesh) override;
|
||||
|
||||
};
|
||||
|
||||
#endif //GBA_BITMAP_ENGINE_PROJECT_RENDERER_H
|
@ -0,0 +1,13 @@
|
||||
//
|
||||
// Created by Wouter Groeneveld on 11/07/20.
|
||||
//
|
||||
|
||||
#include <libgba-sprite-engine/renderer/renderer.h>
|
||||
#include <libgba-sprite-engine/renderer/gba_engine.h>
|
||||
|
||||
void PixelRenderer::render(const MatrixFx &transformationMatrix, const Mesh* mesh) {
|
||||
for (auto &vertex : mesh->vertices()) {
|
||||
auto projectedPoint = engine->project(*vertex.get(), transformationMatrix);
|
||||
engine->plotPixel(projectedPoint, mesh->colorIndex());
|
||||
}
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
//
|
||||
// Created by Wouter Groeneveld on 11/07/20.
|
||||
//
|
||||
|
||||
#include <libgba-sprite-engine/renderer/renderer.h>
|
||||
#include <libgba-sprite-engine/renderer/gba_engine.h>
|
||||
|
||||
void WiredRenderer::render(const MatrixFx &transformationMatrix, const Mesh* mesh) {
|
||||
for (auto &face : mesh->faces()) {
|
||||
auto &vertexA = mesh->vertices()[face.a];
|
||||
auto &vertexB = mesh->vertices()[face.b];
|
||||
auto &vertexC = mesh->vertices()[face.c];
|
||||
|
||||
auto pixelA = engine->project(*vertexA.get(), transformationMatrix);
|
||||
auto pixelB = engine->project(*vertexB.get(), transformationMatrix);
|
||||
auto pixelC = engine->project(*vertexC.get(), transformationMatrix);
|
||||
|
||||
engine->plotLine(pixelA, pixelB, mesh->colorIndex());
|
||||
engine->plotLine(pixelB, pixelC, mesh->colorIndex());
|
||||
engine->plotLine(pixelC, pixelA, mesh->colorIndex());
|
||||
}
|
||||
}
|
Loading…
Reference in new issue