#pragma once #include "ggl.h" #include "vertexbuffer.h" #include "shader.h" #include #include "Glm/glm.hpp" #include "Glm/ext.hpp" struct VertexIndex { int position; int texcoord; int normal; }; class Model { public: VertexBuffer* mVertexBuffer; Shader* mShader; public: glm::mat4 mModelMatrix; float *mLightViewMatrix, *mLightProjectionMatrix; Model(); void Init(const char *modelPath); void Draw(glm::mat4 &viewMatrix, glm::mat4 projectionMatrix, float x, float y, float z); void SetPosition(float x, float y, float z); void SetAmbientMaterial(float r, float g, float b, float a); void SetDiffuseMaterial(float r, float g, float b, float a); void SetSpecularMaterial(float r, float g, float b, float a); void SetTexture(const char*imagePath); private: unsigned char* fileContent = nullptr; std::vector position; std::vector texcoord; std::vector normal; std::vector vertices; void parseModel(); void parseLine(const char* line); glm::float3 parseFloat(const char* line); VertexIndex parseVertexIndex(std::string pointStr); int addVertices(VertexIndex indexes); void parseTexcoord(const char* line); void parseNormal(const char* line); void parsePosition(const char* line); void parseFace(const char* line); void createVertexBuffer(); };