Spinning Topp Logo BlackTopp Studios
inc
meshloader.cpp
1 // © Copyright 2010 - 2016 BlackTopp Studios Inc.
2 /* This file is part of The Mezzanine Engine.
3 
4  The Mezzanine Engine is free software: you can redistribute it and/or modify
5  it under the terms of the GNU General Public License as published by
6  the Free Software Foundation, either version 3 of the License, or
7  (at your option) any later version.
8 
9  The Mezzanine Engine is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  GNU General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License
15  along with The Mezzanine Engine. If not, see <http://www.gnu.org/licenses/>.
16 */
17 /* The original authors have included a copy of the license specified above in the
18  'Docs' folder. See 'gpl.txt'
19 */
20 /* We welcome the use of the Mezzanine engine to anyone, including companies who wish to
21  Build professional software and charge for their product.
22 
23  However there are some practical restrictions, so if your project involves
24  any of the following you should contact us and we will try to work something
25  out:
26  - DRM or Copy Protection of any kind(except Copyrights)
27  - Software Patents You Do Not Wish to Freely License
28  - Any Kind of Linking to Non-GPL licensed Works
29  - Are Currently In Violation of Another Copyright Holder's GPL License
30  - If You want to change our code and not add a few hundred MB of stuff to
31  your distribution
32 
33  These and other limitations could cause serious legal problems if you ignore
34  them, so it is best to simply contact us or the Free Software Foundation, if
35  you have any questions.
36 
37  Joseph Toppi - toppij@gmail.com
38  John Blackwood - makoenergy02@gmail.com
39 */
40 #ifndef _graphicsproceduralmeshloader_cpp
41 #define _graphicsproceduralmeshloader_cpp
42 
43 #include "Graphics/Procedural/Mesh/meshloader.h"
44 
45 #include "Graphics/mesh.h"
46 #include "Graphics/submesh.h"
47 
48 namespace Mezzanine
49 {
50  namespace Graphics
51  {
52  namespace Procedural
53  {
55  GenMesh(NULL)
56  { }
57 
59  { }
60 
61  ///////////////////////////////////////////////////////////////////////////////
62  // Utility
63 
65  {
66  Buffer.RebaseOffset();
67  Buffer.EstimateVertexCount( this->GenMesh->GetVertexCount() );
68  Buffer.EstimateIndexCount( this->GenMesh->GetIndexCount() );
69 
70  for( Whole SubMeshIndex = 0 ; SubMeshIndex < this->GenMesh->GetNumSubMeshes() ; ++SubMeshIndex )
71  {
72  Graphics::MeshInfo SubMeshInfo;
73  SubMesh* CurrSubMesh = this->GenMesh->GetSubMesh(SubMeshIndex);
74 
75  CurrSubMesh->GetInfo(SubMeshInfo);
76  /// @todo This doesn't account for the submesh name. Should research/consider adding this.
77  Buffer.BeginSection(SubMeshInfo.MaterialName,SubMeshInfo.MaterialGroup,SubMeshInfo.OperationType);
78  for( Whole CurrVert = 0 ; CurrVert < SubMeshInfo.Vertices.VertexCount ; ++CurrVert )
79  { Buffer.AddVertex( SubMeshInfo.Vertices.Positions[CurrVert], SubMeshInfo.Vertices.Normals[CurrVert], SubMeshInfo.Vertices.UVs[CurrVert] ); }
80 
81  for( Whole CurrIndex = 0 ; CurrIndex < SubMeshInfo.Vertices.IndexCount ; ++CurrIndex )
82  { Buffer.AddIndex( SubMeshInfo.Vertices.Indices[CurrIndex] ); }
83  Buffer.EndSection();
84  }
85  }
86 
87  ///////////////////////////////////////////////////////////////////////////////
88  // Configuration
89 
91  {
92  this->GenMesh = ToGenerate;
93  return *this;
94  }
95  }//Procedural
96  }//Graphics
97 }//Mezzanine
98 
99 #endif
VertexInfo Vertices
A collection of containers storing the various properties of a Vertex.
Definition: meshinfo.h:108
virtual void AddToTriangleBuffer(TriangleBuffer &Buffer) const
Adds the vertices and indices as configured in this generator to a triangle buffer.
Definition: meshloader.cpp:64
virtual ~MeshLoader()
Class destructor.
Definition: meshloader.cpp:58
IntVec Indices
A container of Indexes used to assemble the Vertices for rendering.
Definition: meshinfo.h:79
A convenience buffer that stores vertices and indices of a mesh to be generated.
This class is used to check and modify the properties of a graphics mesh.
Definition: mesh.h:63
String MaterialName
The name of the material used to render the Mesh/SubMesh.
Definition: meshinfo.h:103
void EstimateIndexCount(const Whole IndexCount)
Gives an estimation of the number of indices needed for this triangle buffer.
String MaterialGroup
The resource group in which the named Material can be found.
Definition: meshinfo.h:105
A generator class for loading an external mesh into a procedural buffer.
Definition: meshloader.h:56
This class represents a sub-section of an overall mesh.
Definition: submesh.h:61
void BeginSection(const String &MatName="", const String &MatGroup="", const Whole RenderOp=Graphics::RO_TriangleList)
Gets a BufferSection that can be appended to the end of this buffer.
Whole GetVertexCount() const
Gets the number of Vertices in this Mesh.
Definition: mesh.cpp:109
Whole VertexCount
The number of Vertices in the Mesh/SubMesh.
Definition: meshinfo.h:65
void EstimateVertexCount(const Whole VertexCount)
Gives an estimation of the number of vertices need for this triangle buffer.
Mesh * GenMesh
A pointer to the Mesh to copy into a TriangleBuffer.
Definition: meshloader.h:61
void EndSection()
Sets a BufferSection as the end section of this buffer.
Vector2Vec UVs
A container storing the texture coordinates of each vertex.
Definition: meshinfo.h:72
A convenience class for the storage of rendering data in a Mesh/SubMesh.
Definition: meshinfo.h:97
Whole GetNumSubMeshes() const
Gets the number of SubMeshes in this Mesh.
Definition: mesh.cpp:131
Vector3Vec Normals
A container storing the normal of each vertex.
Definition: meshinfo.h:74
TriangleBuffer & AddIndex(const Integer Index)
Adds an index to the index buffer.
void GetInfo(MeshInfo &ToFill) const
Gets the information used to render this SubMesh.
Definition: submesh.cpp:87
Whole GetIndexCount() const
Gets the number of Indices in this Mesh.
Definition: mesh.cpp:117
The bulk of the engine components go in this namspace.
Definition: actor.cpp:56
Whole IndexCount
The number of Indexes in the Mesh/SubMesh.
Definition: meshinfo.h:67
unsigned long Whole
Whole is an unsigned integer, it will be at least 32bits in size.
Definition: datatypes.h:151
Whole OperationType
Used Internally. Describes how the Vertex data should be treated when rendering.
Definition: meshinfo.h:100
Vector3Vec Positions
A container storing the position of each vertex.
Definition: meshinfo.h:70
SubMesh * GetSubMesh(const Whole Index) const
Gets a SubMesh by index.
Definition: mesh.cpp:128
MeshLoader & SetMesh(Mesh *ToGenerate)
Sets the Mesh to be copied to the TriangleBuffer.
Definition: meshloader.cpp:90
TriangleBuffer & AddVertex(const Vertex &Vert)
Adds a premade Vertex to the buffer.