kuso4ek

Assimp model loader

Jul 20th, 2020
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.10 KB | None | 0 0
  1. class Model {
  2. public:
  3.     float* vertexArray;
  4.     float* normalArray;
  5.     float* uvArray;
  6.     int numVerts;
  7.     GLuint ModelTexture;
  8.     void Load(string filename, string texture) {
  9.         ModelTexture = LoadTexture(texture);
  10.         Assimp::Importer importer;
  11.         const aiScene* scene = importer.ReadFile(filename, aiProcessPreset_TargetRealtime_Fast);
  12.         aiMesh* mesh = scene->mMeshes[0];
  13.         numVerts = mesh->mNumFaces * 3;
  14.         vertexArray = new float[mesh->mNumFaces * 3 * 3];
  15.         normalArray = new float[mesh->mNumFaces * 3 * 3];
  16.         uvArray = new float[mesh->mNumFaces * 3 * 2];
  17.         for (unsigned int i = 0; i < mesh->mNumFaces; i++)
  18.         {
  19.             const aiFace& face = mesh->mFaces[i];
  20.  
  21.             for (int j = 0; j < 3; j++)
  22.             {
  23.                 aiVector3D uv = mesh->mTextureCoords[0][face.mIndices[j]];
  24.                 memcpy(uvArray, &uv, sizeof(float) * 2);
  25.                 uvArray += 2;
  26.  
  27.                 aiVector3D normal = mesh->mNormals[face.mIndices[j]];
  28.                 memcpy(normalArray, &normal, sizeof(float) * 3);
  29.                 normalArray += 3;
  30.  
  31.                 aiVector3D pos = mesh->mVertices[face.mIndices[j]];
  32.                 memcpy(vertexArray, &pos, sizeof(float) * 3);
  33.                 vertexArray += 3;
  34.             }
  35.         }
  36.  
  37.         uvArray -= mesh->mNumFaces * 3 * 2;
  38.         normalArray -= mesh->mNumFaces * 3 * 3;
  39.         vertexArray -= mesh->mNumFaces * 3 * 3;
  40.     }
  41.     void Draw() {
  42.         glPushMatrix();
  43.  
  44.         glBindTexture(GL_TEXTURE_2D, ModelTexture);
  45.  
  46.         glEnableClientState(GL_VERTEX_ARRAY);
  47.         glEnableClientState(GL_NORMAL_ARRAY);
  48.         glEnableClientState(GL_TEXTURE_COORD_ARRAY);
  49.  
  50.         glVertexPointer(3, GL_FLOAT, 0, vertexArray);
  51.         glNormalPointer(GL_FLOAT, 0, normalArray);
  52.  
  53.         glTexCoordPointer(2, GL_FLOAT, 0, uvArray);
  54.  
  55.         glDrawArrays(GL_TRIANGLES, 0, numVerts);
  56.         glDisableClientState(GL_VERTEX_ARRAY);
  57.         glDisableClientState(GL_NORMAL_ARRAY);
  58.         glDisableClientState(GL_TEXTURE_COORD_ARRAY);
  59.         glPopMatrix();
  60.     }
  61. }
Advertisement
Add Comment
Please, Sign In to add comment