X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fmodel%2FShape.hpp;h=312b1aafd1cf212951ffeee433ed2a22b99da5bf;hb=8ab4ea13545cccbacbd1ed610968d3f481c1b3c8;hp=39dd50f3b93048ad2edfe999113cf4e8fa4b13d5;hpb=bc1cefd505bf1f34639b8839cb337b08310ceb8e;p=blank.git diff --git a/src/model/Shape.hpp b/src/model/Shape.hpp index 39dd50f..312b1aa 100644 --- a/src/model/Shape.hpp +++ b/src/model/Shape.hpp @@ -2,10 +2,10 @@ #define BLANK_MODEL_SHAPE_HPP_ #include "BlockModel.hpp" -#include "Model.hpp" +#include "EntityModel.hpp" #include "OutlineModel.hpp" +#include "SkyBoxModel.hpp" -#include #include @@ -21,47 +21,42 @@ struct Shape { /// the number of vertex indices this shape has size_t VertexIndexCount() const noexcept { return vtx_idx.size(); } - const Model::Normal &VertexNormal(size_t idx) const noexcept { return vtx_nrm[idx]; } - Model::Normal VertexNormal( + const EntityModel::Normal &VertexNormal(size_t idx) const noexcept { return vtx_nrm[idx]; } + EntityModel::Normal VertexNormal( size_t idx, const glm::mat4 &transform ) const noexcept { - return Model::Normal(transform * glm::vec4(vtx_nrm[idx], 0.0f)); + return EntityModel::Normal(transform * glm::vec4(vtx_nrm[idx], 0.0f)); } /// fill given buffers with this shape's elements with an /// optional transform and offset void Vertices( - Model::Positions &vertex, - Model::Normals &normal, - Model::Indices &index + EntityModel::Buffer &out, + float tex_offset = 0.0f ) const; void Vertices( - Model::Positions &vertex, - Model::Normals &normal, - Model::Indices &index, + EntityModel::Buffer &out, const glm::mat4 &transform, - Model::Index idx_offset = 0 + float tex_offset = 0.0f, + EntityModel::Index idx_offset = 0 ) const; void Vertices( - BlockModel::Positions &vertex, - BlockModel::Indices &index, + BlockModel::Buffer &out, const glm::mat4 &transform, + float tex_offset = 0.0f, BlockModel::Index idx_offset = 0 ) const; + void Vertices( + SkyBoxModel::Buffer &out + ) const; /// the number of vertices this shape's outline has size_t OutlineCount() const { return out_pos.size(); } /// the number of vertex indices this shape's outline has size_t OutlineIndexCount() const { return out_idx.size(); } - /// fill given buffers with this shape's outline's elements with - /// an optional offset - void Outline( - OutlineModel::Positions &vertex, - OutlineModel::Indices &index, - const OutlineModel::Position &offset = { 0.0f, 0.0f, 0.0f }, - OutlineModel::Index idx_offset = 0 - ) const; + /// fill given buffers with this shape's outline's elements + void Outline(OutlineModel::Buffer &out) const; /// Check if given ray would pass though this shape if it were /// transformed with given matrix. @@ -79,24 +74,28 @@ struct Shape { virtual bool Intersects( const glm::mat4 &M, const AABB &box, - const glm::mat4 &box_M + const glm::mat4 &box_M, + float &depth, + glm::vec3 &normal ) const noexcept = 0; protected: - 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; - } + void SetShape( + const EntityModel::Positions &pos, + const EntityModel::Normals &nrm, + const EntityModel::Indices &idx); + void SetTexture( + const BlockModel::TexCoords &tex_coords); + void SetOutline( + const OutlineModel::Positions &pos, + const OutlineModel::Indices &idx); private: - Model::Positions vtx_pos; - Model::Normals vtx_nrm; - Model::Indices vtx_idx; + EntityModel::Positions vtx_pos; + EntityModel::Normals vtx_nrm; + EntityModel::Indices vtx_idx; + + BlockModel::TexCoords vtx_tex_coords; OutlineModel::Positions out_pos; OutlineModel::Indices out_idx;