X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fshape.hpp;h=f31075b10fb48f8e2103bbad1349af97b9c10dfd;hb=d2d3cb877984b97fafb97254f5005cbf4bcf47a6;hp=af19bb12e8ccfbf75fd6205f1e5fecf08e30b6fe;hpb=82426ae2997d2b21703d2d5afb631a84736e975f;p=blank.git diff --git a/src/shape.hpp b/src/shape.hpp index af19bb1..f31075b 100644 --- a/src/shape.hpp +++ b/src/shape.hpp @@ -13,33 +13,40 @@ namespace blank { struct Shape { /// the number of vertices (and normals) this shape has - size_t VertexCount() const { return vtx; } + size_t VertexCount() const { return vtx_pos.size(); } /// the number of vertex indices this shape has - size_t VertexIndexCount() const { return vtx_idx; } + size_t VertexIndexCount() const { return vtx_idx.size(); } /// fill given buffers with this shape's elements with an /// optional offset - virtual void Vertices( - std::vector &vertex, - std::vector &normal, - std::vector &index, - const glm::vec3 &elem_offset = { 0.0f, 0.0f, 0.0f }, + void Vertices( + Model::Positions &vertex, + Model::Normals &normal, + Model::Indices &index, + const Model::Position &elem_offset = { 0.0f, 0.0f, 0.0f }, Model::Index idx_offset = 0 - ) const = 0; + ) const; + void Vertices( + Model::Positions &vertex, + Model::Normals &normal, + Model::Indices &index, + const glm::mat4 &transform, + Model::Index idx_offset = 0 + ) const; /// the number of vertices this shape's outline has - size_t OutlineCount() const { return outl; } + size_t OutlineCount() const { return out_pos.size(); } /// the number of vertex indices this shape's outline has - size_t OutlineIndexCount() const { return outl_idx; } + size_t OutlineIndexCount() const { return out_idx.size(); } /// fill given buffers with this shape's outline's elements with /// an optional offset - virtual void Outline( - std::vector &vertex, - std::vector &index, - const glm::vec3 &offset = { 0.0f, 0.0f, 0.0f }, + void Outline( + OutlineModel::Positions &vertex, + OutlineModel::Indices &index, + const OutlineModel::Position &offset = { 0.0f, 0.0f, 0.0f }, OutlineModel::Index idx_offset = 0 - ) const = 0; + ) const; /// Check if given ray would pass though this shape if it were /// transformed with given matrix. @@ -53,14 +60,23 @@ struct Shape { ) const = 0; protected: - Shape(size_t vtx, size_t vtx_idx, size_t outl, size_t outl_idx) - : vtx(vtx), vtx_idx(vtx_idx), outl(outl), outl_idx(outl_idx) { } + void SetShape(const Model::Positions &pos, const Model::Normals &nrm, const Model::Indices &idx) { + vtx_pos = pos; + vtx_nrm = nrm; + vtx_idx = idx; + } + void SetOutline(const OutlineModel::Positions &pos, const OutlineModel::Indices &idx) { + out_pos = pos; + out_idx = idx; + } private: - size_t vtx; - size_t vtx_idx; - size_t outl; - size_t outl_idx; + Model::Positions vtx_pos; + Model::Normals vtx_nrm; + Model::Indices vtx_idx; + + OutlineModel::Positions out_pos; + OutlineModel::Indices out_idx; }; @@ -71,21 +87,6 @@ class NullShape public: NullShape(); - void Vertices( - std::vector &vertex, - std::vector &normal, - std::vector &index, - const glm::vec3 &elem_offset = { 0.0f, 0.0f, 0.0f }, - Model::Index idx_offset = 0 - ) const override; - - void Outline( - std::vector &vertex, - std::vector &index, - const glm::vec3 &offset = { 0.0f, 0.0f, 0.0f }, - OutlineModel::Index idx_offset = 0 - ) const override; - bool Intersects(const Ray &, const glm::mat4 &, float &, glm::vec3 &) const override; }; @@ -97,21 +98,6 @@ class CuboidShape public: CuboidShape(const AABB &bounds); - void Vertices( - std::vector &vertex, - std::vector &normal, - std::vector &index, - const glm::vec3 &elem_offset = { 0.0f, 0.0f, 0.0f }, - Model::Index idx_offset = 0 - ) const override; - - void Outline( - std::vector &vertex, - std::vector &index, - const glm::vec3 &offset = { 0.0f, 0.0f, 0.0f }, - OutlineModel::Index idx_offset = 0 - ) const override; - bool Intersects(const Ray &, const glm::mat4 &, float &, glm::vec3 &) const override; private: @@ -126,21 +112,6 @@ class StairShape public: StairShape(const AABB &bounds, const glm::vec2 &clip); - void Vertices( - std::vector &vertex, - std::vector &normal, - std::vector &index, - const glm::vec3 &elem_offset = { 0.0f, 0.0f, 0.0f }, - Model::Index idx_offset = 0 - ) const override; - - void Outline( - std::vector &vertex, - std::vector &index, - const glm::vec3 &offset = { 0.0f, 0.0f, 0.0f }, - OutlineModel::Index idx_offset = 0 - ) const override; - bool Intersects(const Ray &, const glm::mat4 &, float &, glm::vec3 &) const override; private: