1 #ifndef BLANK_MODEL_SHAPE_HPP_
2 #define BLANK_MODEL_SHAPE_HPP_
4 #include "BlockModel.hpp"
5 #include "EntityModel.hpp"
6 #include "OutlineModel.hpp"
18 /// the number of vertices (and normals) this shape has
19 size_t VertexCount() const noexcept { return vtx_pos.size(); }
20 /// the number of vertex indices this shape has
21 size_t VertexIndexCount() const noexcept { return vtx_idx.size(); }
23 const EntityModel::Normal &VertexNormal(size_t idx) const noexcept { return vtx_nrm[idx]; }
24 EntityModel::Normal VertexNormal(
25 size_t idx, const glm::mat4 &transform
27 return EntityModel::Normal(transform * glm::vec4(vtx_nrm[idx], 0.0f));
30 /// fill given buffers with this shape's elements with an
31 /// optional transform and offset
33 EntityModel::Buffer &out,
34 float tex_offset = 0.0f
37 EntityModel::Buffer &out,
38 const glm::mat4 &transform,
39 float tex_offset = 0.0f,
40 EntityModel::Index idx_offset = 0
43 BlockModel::Buffer &out,
44 const glm::mat4 &transform,
45 float tex_offset = 0.0f,
46 BlockModel::Index idx_offset = 0
49 /// the number of vertices this shape's outline has
50 size_t OutlineCount() const { return out_pos.size(); }
51 /// the number of vertex indices this shape's outline has
52 size_t OutlineIndexCount() const { return out_idx.size(); }
54 /// fill given buffers with this shape's outline's elements with
55 /// an optional offset
57 OutlineModel::Buffer &out,
58 const OutlineModel::Position &offset = { 0.0f, 0.0f, 0.0f },
59 OutlineModel::Index idx_offset = 0
62 /// Check if given ray would pass though this shape if it were
63 /// transformed with given matrix.
64 /// If true, dist and normal hold the intersection distance and
65 /// normal, otherwise their content is undefined.
66 virtual bool Intersects(
73 /// Check for intersection with given OBB.
74 /// The OBB is defined by box and box_M, M is applied to the shape.
75 virtual bool Intersects(
78 const glm::mat4 &box_M,
85 const EntityModel::Positions &pos,
86 const EntityModel::Normals &nrm,
87 const EntityModel::Indices &idx);
89 const BlockModel::TexCoords &tex_coords);
91 const OutlineModel::Positions &pos,
92 const OutlineModel::Indices &idx);
95 EntityModel::Positions vtx_pos;
96 EntityModel::Normals vtx_nrm;
97 EntityModel::Indices vtx_idx;
99 BlockModel::TexCoords vtx_tex_coords;
101 OutlineModel::Positions out_pos;
102 OutlineModel::Indices out_idx;