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]);
108std::shared_ptr<ModelMaterial> Mesh::GetMaterial()
const
113const std::string& Mesh::Name()
const
118const std::vector<glm::vec3>& Mesh::Vertices()
const
123const std::vector<glm::vec3>& Mesh::Normals()
const
128const std::vector<glm::vec3>& Mesh::Tangents()
const
133const std::vector<glm::vec3>& Mesh::BiNormals()
const
138const std::vector<std::vector<glm::vec3>>& Mesh::TextureCoordinates()
const
140 return mTextureCoordinates;
143const std::vector<std::vector<glm::vec4>>& Mesh::VertexColors()
const
145 return mVertexColors;
148std::uint32_t Mesh::FaceCount()
const
153const std::vector<std::uint32_t>& Mesh::Indices()
const
Mesh(const Mesh &)=default
Represents a 3D model composed of multiple meshes and materials.