101 lines
3.7 KiB
C++
101 lines
3.7 KiB
C++
#include <tuple>
|
|
#include <bgtu/computer_graphics_lab_work/renderer_api/sprite.hpp>
|
|
#include <bgtu/computer_graphics_lab_work/utilities/shapes/polygon.hpp>
|
|
#include <bgtu/computer_graphics_lab_work/utilities/shapes/circle.hpp>
|
|
#include "../variants.hpp"
|
|
#include "../sprite_data.hpp"
|
|
#include "common.hpp"
|
|
|
|
namespace BGTU::ComputerGraphicsLabWork::Lab1 {
|
|
namespace Variant1 {
|
|
class S1 : public RendererApi::Sprite<Lab1SpriteData::ShapeData, Utilities::ZoomedVoxelPainter<Utilities::DefaultVoxelDrawerCache::VoxelPainterImpl>> {
|
|
public:
|
|
void draw(
|
|
BGTU::ComputerGraphicsLabWork::Utilities::ZoomedVoxelPainter<BGTU::ComputerGraphicsLabWork::Utilities::DefaultVoxelDrawerCache::VoxelPainterImpl> *frame,
|
|
const BGTU::ComputerGraphicsLabWork::Lab1::Lab1SpriteData::ShapeData *data
|
|
) const final {
|
|
Utilities::Shapes::draw_polygon_edge(
|
|
frame,
|
|
{data->neg_rotated(data->radius / 2, 0), data->neg_rotated(data->radius / 2, 90), data->neg_rotated(data->radius / 2, 180), data->neg_rotated(data->radius / 2, 270),},
|
|
2,
|
|
{255, 0, 0}
|
|
);
|
|
}
|
|
};
|
|
|
|
class S2 : public RendererApi::Sprite<Lab1SpriteData::ShapeData, Utilities::ZoomedVoxelPainter<Utilities::DefaultVoxelDrawerCache::VoxelPainterImpl>> {
|
|
public:
|
|
void draw(
|
|
BGTU::ComputerGraphicsLabWork::Utilities::ZoomedVoxelPainter<BGTU::ComputerGraphicsLabWork::Utilities::DefaultVoxelDrawerCache::VoxelPainterImpl> *frame,
|
|
const BGTU::ComputerGraphicsLabWork::Lab1::Lab1SpriteData::ShapeData *data
|
|
) const final {
|
|
Utilities::Shapes::draw_polygon_edge(
|
|
frame,
|
|
{
|
|
{data->radius, 0},
|
|
{0, data->radius},
|
|
{-data->radius, 0},
|
|
{0, -data->radius}
|
|
},
|
|
3,
|
|
{0, 255, 255}
|
|
);
|
|
}
|
|
};
|
|
|
|
class S3 : public RendererApi::Sprite<Lab1SpriteData::ShapeData, Utilities::ZoomedVoxelPainter<Utilities::DefaultVoxelDrawerCache::VoxelPainterImpl>> {
|
|
public:
|
|
void draw(
|
|
BGTU::ComputerGraphicsLabWork::Utilities::ZoomedVoxelPainter<BGTU::ComputerGraphicsLabWork::Utilities::DefaultVoxelDrawerCache::VoxelPainterImpl> *frame,
|
|
const BGTU::ComputerGraphicsLabWork::Lab1::Lab1SpriteData::ShapeData *data
|
|
) const final {
|
|
Utilities::Shapes::draw_circle_edge(
|
|
frame,
|
|
{0, 0},
|
|
data->radius,
|
|
5,
|
|
{0, 127, 255}
|
|
);
|
|
}
|
|
};
|
|
|
|
class S4 : public RendererApi::Sprite<Lab1SpriteData::ShapeData, Utilities::ZoomedVoxelPainter<Utilities::DefaultVoxelDrawerCache::VoxelPainterImpl>> {
|
|
public:
|
|
void draw(
|
|
BGTU::ComputerGraphicsLabWork::Utilities::ZoomedVoxelPainter<BGTU::ComputerGraphicsLabWork::Utilities::DefaultVoxelDrawerCache::VoxelPainterImpl> *frame,
|
|
const BGTU::ComputerGraphicsLabWork::Lab1::Lab1SpriteData::ShapeData *data
|
|
) const final {
|
|
Utilities::Shapes::draw_circle_edge(
|
|
frame,
|
|
{0, 0},
|
|
data->radius / (2.0 * std::sqrt(2)),
|
|
1,
|
|
{127, 127, 127}
|
|
);
|
|
}
|
|
};
|
|
|
|
class S5 : public RendererApi::Sprite<Lab1SpriteData::ShapeData, Utilities::ZoomedVoxelPainter<Utilities::DefaultVoxelDrawerCache::VoxelPainterImpl>> {
|
|
public:
|
|
void draw(
|
|
BGTU::ComputerGraphicsLabWork::Utilities::ZoomedVoxelPainter<BGTU::ComputerGraphicsLabWork::Utilities::DefaultVoxelDrawerCache::VoxelPainterImpl> *frame,
|
|
const BGTU::ComputerGraphicsLabWork::Lab1::Lab1SpriteData::ShapeData *data
|
|
) const final {
|
|
auto r2 = data->radius / 2;
|
|
Utilities::Shapes::draw_polygon_edge(
|
|
frame,
|
|
{
|
|
{-r2, -r2},
|
|
{-r2, r2},
|
|
{r2, r2},
|
|
{r2, -r2}
|
|
},
|
|
3,
|
|
{0, 255, 0}
|
|
);
|
|
}
|
|
};
|
|
}
|
|
|
|
variant_sprites variant1 = variant_sprites::make(Variant1::S1{}, Variant1::S2{}, Variant1::S3{}, Variant1::S4{}, Variant1::S5{});
|
|
} |