X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fmodel%2FShape.hpp;h=d2e06952ed2eae5410ae4657e6a5d6af7c5249de;hb=eba29c8ad489194cd1e3cd64b5f23424ad4384ef;hp=39dd50f3b93048ad2edfe999113cf4e8fa4b13d5;hpb=bc1cefd505bf1f34639b8839cb337b08310ceb8e;p=blank.git diff --git a/src/model/Shape.hpp b/src/model/Shape.hpp index 39dd50f..d2e0695 100644 --- a/src/model/Shape.hpp +++ b/src/model/Shape.hpp @@ -1,11 +1,10 @@ #ifndef BLANK_MODEL_SHAPE_HPP_ #define BLANK_MODEL_SHAPE_HPP_ -#include "BlockModel.hpp" -#include "Model.hpp" -#include "OutlineModel.hpp" +#include "../graphics/BlockMesh.hpp" +#include "../graphics/EntityMesh.hpp" +#include "../graphics/OutlineMesh.hpp" -#include #include @@ -21,32 +20,30 @@ 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 EntityMesh::Normal &VertexNormal(size_t idx) const noexcept { return vtx_nrm[idx]; } + EntityMesh::Normal VertexNormal( size_t idx, const glm::mat4 &transform ) const noexcept { - return Model::Normal(transform * glm::vec4(vtx_nrm[idx], 0.0f)); + return EntityMesh::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 + EntityMesh::Buffer &out, + float tex_offset = 0.0f ) const; void Vertices( - Model::Positions &vertex, - Model::Normals &normal, - Model::Indices &index, + EntityMesh::Buffer &out, const glm::mat4 &transform, - Model::Index idx_offset = 0 + float tex_offset = 0.0f, + EntityMesh::Index idx_offset = 0 ) const; void Vertices( - BlockModel::Positions &vertex, - BlockModel::Indices &index, + BlockMesh::Buffer &out, const glm::mat4 &transform, - BlockModel::Index idx_offset = 0 + float tex_offset = 0.0f, + BlockMesh::Index idx_offset = 0 ) const; /// the number of vertices this shape's outline has @@ -54,14 +51,8 @@ struct Shape { /// 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(OutlineMesh::Buffer &out) const; /// Check if given ray would pass though this shape if it were /// transformed with given matrix. @@ -79,27 +70,31 @@ 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 EntityMesh::Positions &pos, + const EntityMesh::Normals &nrm, + const EntityMesh::Indices &idx); + void SetTexture( + const BlockMesh::TexCoords &tex_coords); + void SetOutline( + const OutlineMesh::Positions &pos, + const OutlineMesh::Indices &idx); private: - Model::Positions vtx_pos; - Model::Normals vtx_nrm; - Model::Indices vtx_idx; + EntityMesh::Positions vtx_pos; + EntityMesh::Normals vtx_nrm; + EntityMesh::Indices vtx_idx; + + BlockMesh::TexCoords vtx_tex_coords; - OutlineModel::Positions out_pos; - OutlineModel::Indices out_idx; + OutlineMesh::Positions out_pos; + OutlineMesh::Indices out_idx; };