@@ -34,6 +34,7 @@ struct BMFMaterial {
3434struct Mesh {
3535 std::vector<Position> positions;
3636 std::vector<Position> normals;
37+ std::vector<Position> tangents;
3738 std::vector<Position2D> uvs;
3839 std::vector<uint32_t > indices;
3940 int materialIndex;
@@ -57,6 +58,12 @@ void processMesh(aiMesh* mesh, const aiScene* scene) {
5758 normal.z = mesh->mNormals [i].z ;
5859 m.normals .push_back (normal);
5960
61+ Position tangent;
62+ tangent.x = mesh->mTangents [i].x ;
63+ tangent.y = mesh->mTangents [i].y ;
64+ tangent.z = mesh->mTangents [i].z ;
65+ m.tangents .push_back (tangent);
66+
6067 Position2D uv;
6168 assert (mesh->mNumUVComponents > 0 );
6269 uv.x = mesh->mTextureCoords [0 ][i].x ;
@@ -157,7 +164,7 @@ int main(int argc, char** argv) {
157164 }
158165
159166 Assimp::Importer importer;
160- const aiScene* scene = importer.ReadFile (argv[argc-1 ], aiProcess_PreTransformVertices | aiProcess_Triangulate | aiProcess_GenNormals | aiProcess_OptimizeMeshes | aiProcess_OptimizeGraph | aiProcess_JoinIdenticalVertices | aiProcess_ImproveCacheLocality);
167+ const aiScene* scene = importer.ReadFile (argv[argc-1 ], aiProcess_PreTransformVertices | aiProcess_Triangulate | aiProcess_GenNormals | aiProcess_OptimizeMeshes | aiProcess_OptimizeGraph | aiProcess_JoinIdenticalVertices | aiProcess_ImproveCacheLocality | aiProcess_CalcTangentSpace );
161168 if (!scene || scene->mFlags & AI_SCENE_FLAGS_INCOMPLETE, !scene->mRootNode ) {
162169 std::cout << " Error while loading model with assimp: " << importer.GetErrorString () << std::endl;
163170 return 1 ;
@@ -212,6 +219,10 @@ int main(int argc, char** argv) {
212219 output.write ((char *)&mesh.normals [i].y , sizeof (float ));
213220 output.write ((char *)&mesh.normals [i].z , sizeof (float ));
214221
222+ output.write ((char *)&mesh.tangents [i].x , sizeof (float ));
223+ output.write ((char *)&mesh.tangents [i].y , sizeof (float ));
224+ output.write ((char *)&mesh.tangents [i].z , sizeof (float ));
225+
215226 output.write ((char *)&mesh.uvs [i].x , sizeof (float ));
216227 output.write ((char *)&mesh.uvs [i].y , sizeof (float ));
217228 }
0 commit comments