]> git.localhorst.tv Git - blank.git/blob - src/shape.hpp
use player-relative coordinates for rendering
[blank.git] / src / shape.hpp
1 #ifndef BLANK_SHAPE_HPP_
2 #define BLANK_SHAPE_HPP_
3
4 #include "geometry.hpp"
5
6 #include <vector>
7 #include <glm/glm.hpp>
8
9
10 namespace blank {
11
12 struct Shape {
13
14         virtual size_t VertexCount() const = 0;
15         virtual void Vertices(std::vector<glm::vec3> &, const glm::vec3 &pos = { 0.0f, 0.0f, 0.0f }) const = 0;
16         virtual void Normals(std::vector<glm::vec3> &) const = 0;
17
18         virtual size_t OutlineCount() const = 0;
19         virtual void Outline(std::vector<glm::vec3> &, const glm::vec3 &pos = { 0.0f, 0.0f, 0.0f }) const = 0;
20
21         virtual bool Intersects(const Ray &, const glm::mat4 &, float &dist, glm::vec3 &normal) const = 0;
22
23 };
24
25
26 class NullShape
27 : public Shape {
28
29 public:
30         size_t VertexCount() const override;
31         void Vertices(std::vector<glm::vec3> &, const glm::vec3 &) const override;
32         void Normals(std::vector<glm::vec3> &) const override;
33
34         size_t OutlineCount() const override;
35         void Outline(std::vector<glm::vec3> &, const glm::vec3 &) const override;
36
37         bool Intersects(const Ray &, const glm::mat4 &, float &, glm::vec3 &) const override;
38
39 };
40
41
42 class CuboidShape
43 : public Shape {
44
45 public:
46         CuboidShape(const AABB &bounds);
47
48         size_t VertexCount() const override;
49         void Vertices(std::vector<glm::vec3> &, const glm::vec3 &) const override;
50         void Normals(std::vector<glm::vec3> &) const override;
51
52         size_t OutlineCount() const override;
53         void Outline(std::vector<glm::vec3> &, const glm::vec3 &) const override;
54
55         bool Intersects(const Ray &, const glm::mat4 &, float &, glm::vec3 &) const override;
56
57 private:
58         AABB bb;
59
60 };
61
62
63 class StairShape
64 : public Shape {
65
66 public:
67         StairShape(const AABB &bounds, const glm::vec2 &clip);
68
69         size_t VertexCount() const override;
70         void Vertices(std::vector<glm::vec3> &, const glm::vec3 &) const override;
71         void Normals(std::vector<glm::vec3> &) const override;
72
73         size_t OutlineCount() const override;
74         void Outline(std::vector<glm::vec3> &, const glm::vec3 &) const override;
75
76         bool Intersects(const Ray &, const glm::mat4 &, float &, glm::vec3 &) const override;
77
78 private:
79         AABB top, bot;
80
81 };
82
83 }
84
85 #endif