#include "OBJ.h" OBJ::OBJ() { //ctor } OBJ::~OBJ() { //destructor } void OBJ::charger( std::string const src, GLuint samplerID, float vertMulti, float textMulti ) { // Attribution texture m_textID = samplerID; /// Chargement du fichier obj // Variables std::vector v_coord(0); // Coordonnées des vertices std::vector v_norm(0); // Normales std::vector v_text(0); // Coordonnées de texture des vertices std::vector v_face(0); // Stocke les faces std::ifstream fichier( src.c_str() ); int taille; float nb; uint32_t id; std::string mot; // Test flux if ( !fichier ) { std::cout << "Erreur lors du chargement du fichier : " << src << std::endl; return; } // Connaître la taille du fichier fichier.seekg(0, std::ios::end); taille = fichier.tellg(); fichier.seekg(0, std::ios::beg); // Lecture du fichier while ( fichier.tellg() < taille && fichier.tellg()!=-1 ) { fichier >> mot; if ( mot == "v" ) { // Coordonnées des vertices for ( int i(0); i<3; i++ ) { fichier >> nb; v_coord.push_back(nb); } } else if ( mot == "vt" ) { // Coordonnées de texture des vertices for ( int i(0); i<2; i++ ) { fichier >> nb; v_text.push_back( nb ); } } else if ( mot == "vn" ) { // Coordonnées des normales for ( int i(0); i<3; i++ ) { fichier >> nb; v_norm.push_back(nb); } } else if ( mot == "f" ) { // Réalisation d'une face for ( int i(0); i<9; i++ ) { fichier >> id; v_face.push_back(id); } } mot = "rien"; } // Création des tableaux openGL int nbFaces( v_face.size() / 9 ); // Contient le nombre de triangles m_nbVec = nbFaces * 3; // Contient le nombre de vertices à afficher uint32_t tailleVertices( nbFaces*3*3 ); // 3 vertices de 3 coordonnées par face m_tailleVerticesBytes = tailleVertices * sizeof(float); m_vertices = new float[tailleVertices]; uint32_t tailleNormales( nbFaces*3*3 ); // 3 normales de 3 coordonnées par face m_tailleNormalesBytes = tailleNormales * sizeof(float); m_normales = new float[tailleNormales]; uint32_t tailleCoordText( nbFaces*3*2 ); // 3 vertices de 2 coordonnées par face m_tailleCoordTextureBytes = tailleCoordText * sizeof(float); m_coordTexture = new float[tailleCoordText]; // Remplissage des tableaux openGL uint32_t i(0), j(0), k(0); for ( i = 0; i