2#include "assimp/scene.h"
9 mName(mesh.mName.C_Str()),
14 mTextureCoordinates(),
20 mVertices.reserve(mesh.mNumVertices);
21 for( uint32_t i = 0; i < mesh.mNumVertices; i++ )
23 const auto& vertex = mesh.mVertices[i];
24 mVertices.emplace_back(vertex.x, vertex.y, vertex.z);
28 if( mesh.HasNormals() )
30 mNormals.reserve(mesh.mNumVertices);
31 for( uint32_t i = 0; i < mesh.mNumVertices; i++ )
33 const auto& normal = mesh.mNormals[i];
34 mNormals.emplace_back(normal.x, normal.y, normal.z);
39 if( mesh.HasTangentsAndBitangents() )
41 mTangents.reserve(mesh.mNumVertices);
42 mBiNormals.reserve(mesh.mNumVertices);
43 for( uint32_t i = 0; i < mesh.mNumVertices; i++ )
45 const auto& tangent = mesh.mTangents[i];
46 mTangents.emplace_back(tangent.x, tangent.y, tangent.z);
48 const auto& binormal = mesh.mBitangents[i];
49 mBiNormals.emplace_back(binormal.x, binormal.y, binormal.z);
54 uint32_t uvChannelCount = mesh.GetNumUVChannels();
55 for( uint32_t i = 0; i < uvChannelCount; i++ )
57 std::vector<glm::vec3> textureCoordinates;
58 textureCoordinates.reserve(mesh.mNumVertices);
59 aiVector3D* aiTextureCoordinates = mesh.mTextureCoords[i];
60 for( uint32_t j = 0; j < mesh.mNumVertices; j++ )
62 const auto& uv = aiTextureCoordinates[j];
63 textureCoordinates.emplace_back(uv.x, uv.y, uv.z);
66 mTextureCoordinates.push_back(std::move(textureCoordinates));
70 uint32_t colorChannelCount = mesh.GetNumColorChannels();
71 for( uint32_t i = 0; i < colorChannelCount; i++ )
73 std::vector<glm::vec4> vertexColors;
74 vertexColors.reserve(mesh.mNumVertices);
75 aiColor4D* aiVertexColors = mesh.mColors[i];
76 for( uint32_t j = 0; j < mesh.mNumVertices; j++ )
78 const auto& c = aiVertexColors[j];
79 vertexColors.emplace_back(c.r, c.g, c.b, c.a);
81 mVertexColors.push_back(std::move(vertexColors));
87 mFaceCount = mesh.mNumFaces;
88 for( uint32_t i = 0; i < mFaceCount; i++ )
90 aiFace* face = &mesh.mFaces[i];
92 for( uint32_t j = 0; j < face->mNumIndices; j++ )
94 mIndices.push_back(face->mIndices[j]);
106std::shared_ptr<ModelMaterial> Mesh::GetMaterial()
const
111const std::string& Mesh::Name()
const
116const std::vector<glm::vec3>& Mesh::Vertices()
const
121const std::vector<glm::vec3>& Mesh::Normals()
const
126const std::vector<glm::vec3>& Mesh::Tangents()
const
131const std::vector<glm::vec3>& Mesh::BiNormals()
const
136const std::vector<std::vector<glm::vec3>>& Mesh::TextureCoordinates()
const
138 return mTextureCoordinates;
141const std::vector<std::vector<glm::vec4>>& Mesh::VertexColors()
const
143 return mVertexColors;
146std::uint32_t Mesh::FaceCount()
const
151const std::vector<std::uint32_t>& Mesh::Indices()
const
Mesh(const Mesh &)=default
Represents a 3D model composed of multiple meshes and materials.