private static GeometryData GenerateGeometryDataFromAssimpMesh(Assimp.Mesh mesh) { var geometryData = new GeometryData { Vertices = new VertexPositionNormalTexture[mesh.VertexCount], Indices = new ushort[mesh.FaceCount * 3] }; geometryData.Vertices = new VertexPositionNormalTexture[mesh.VertexCount]; for (var i = 0; i < mesh.VertexCount; i++) { var vertex = mesh.Vertices[i]; geometryData.Vertices[i].Position = new Vector3(vertex.X, vertex.Y, vertex.Z); var normal = mesh.HasNormals ? mesh.Normals[i] : new Vector3D(); geometryData.Vertices[i].Normal = new Vector3(normal.X, normal.Y, normal.Z); var texcoord = mesh.HasTextureCoords(0) ? mesh.TextureCoordinateChannels[0][i] : new Vector3D(); geometryData.Vertices[i].TextureCoordinate = new Vector2(texcoord.X, texcoord.Y); } for (var i = 0; i < mesh.FaceCount; i++) { geometryData.Indices[i * 3 + 0] = (ushort)mesh.Faces[i].Indices[0]; geometryData.Indices[i * 3 + 1] = (ushort)mesh.Faces[i].Indices[1]; geometryData.Indices[i * 3 + 2] = (ushort)mesh.Faces[i].Indices[2]; } return(geometryData); }