2#include "assimp/scene.h"
9 mName(mesh.mName.C_Str()),
14 mTextureCoordinates(),
22 mVertices.reserve(mesh.mNumVertices);
23 for( uint32_t i = 0; i < mesh.mNumVertices; i++ )
25 const auto& vertex = mesh.mVertices[i];
26 mVertices.emplace_back(vertex.x, vertex.y, vertex.z);
30 if( mesh.HasNormals() )
32 mNormals.reserve(mesh.mNumVertices);
33 for( uint32_t i = 0; i < mesh.mNumVertices; i++ )
35 const auto& normal = mesh.mNormals[i];
36 mNormals.emplace_back(normal.x, normal.y, normal.z);
41 if( mesh.HasTangentsAndBitangents() )
43 mTangents.reserve(mesh.mNumVertices);
44 mBiNormals.reserve(mesh.mNumVertices);
45 for( uint32_t i = 0; i < mesh.mNumVertices; i++ )
47 const auto& tangent = mesh.mTangents[i];
48 mTangents.emplace_back(tangent.x, tangent.y, tangent.z);
50 const auto& binormal = mesh.mBitangents[i];
51 mBiNormals.emplace_back(binormal.x, binormal.y, binormal.z);
56 uint32_t uvChannelCount = mesh.GetNumUVChannels();
57 for( uint32_t i = 0; i < uvChannelCount; i++ )
59 std::vector<glm::vec3> textureCoordinates;
60 textureCoordinates.reserve(mesh.mNumVertices);
61 aiVector3D* aiTextureCoordinates = mesh.mTextureCoords[i];
62 for( uint32_t j = 0; j < mesh.mNumVertices; j++ )
64 const auto& uv = aiTextureCoordinates[j];
65 textureCoordinates.emplace_back(uv.x, uv.y, uv.z);
68 mTextureCoordinates.push_back(std::move(textureCoordinates));
72 uint32_t colorChannelCount = mesh.GetNumColorChannels();
73 for( uint32_t i = 0; i < colorChannelCount; i++ )
75 std::vector<glm::vec4> vertexColors;
76 vertexColors.reserve(mesh.mNumVertices);
77 aiColor4D* aiVertexColors = mesh.mColors[i];
78 for( uint32_t j = 0; j < mesh.mNumVertices; j++ )
80 const auto& c = aiVertexColors[j];
81 vertexColors.emplace_back(c.r, c.g, c.b, c.a);
83 mVertexColors.push_back(move(vertexColors));
89 mFaceCount = mesh.mNumFaces;
90 for( uint32_t i = 0; i < mFaceCount; i++ )
92 aiFace* face = &mesh.mFaces[i];
94 for( uint32_t j = 0; j < face->mNumIndices; j++ )
96 mIndices.push_back(face->mIndices[j]);
140 return mTextureCoordinates;
145 return mVertexColors;
const std::vector< std::vector< glm::vec3 > > & TextureCoordinates() const
Returns texture coordinate sets.
std::shared_ptr< ModelMaterial > GetMaterial() const
Returns the material associated with this mesh.
const std::vector< std::uint32_t > & Indices() const
Returns the vertex index buffer.
const std::vector< glm::vec3 > & Vertices() const
Returns the vertex position array.
const std::vector< glm::vec3 > & BiNormals() const
Returns the vertex binormal array.
Model & GetModel()
Returns the parent model that owns this mesh.
const std::vector< glm::vec3 > & Tangents() const
Returns the vertex tangent array.
const std::vector< std::vector< glm::vec4 > > & VertexColors() const
Returns per-vertex color sets.
Mesh(const Mesh &)=default
std::uint32_t FaceCount() const
Returns the number of faces in the mesh.
const std::vector< glm::vec3 > & Normals() const
Returns the vertex normal array.
const std::string & Name() const
Returns the mesh name as imported from the source file.
Represents a 3D model composed of multiple meshes and materials.