61 unsigned int VBO, EBO;
63 MeshHandle meshHandle;
68 glGenVertexArrays(1, &VAO);
69 glGenBuffers(1, &VBO);
70 glGenBuffers(1, &EBO);
72 glBindVertexArray(VAO);
74 glBindBuffer(GL_ARRAY_BUFFER, VBO);
78 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
79 glBufferData(GL_ELEMENT_ARRAY_BUFFER,
indices.size() *
sizeof(
unsigned int), &
indices[0], GL_STATIC_DRAW);
83 glEnableVertexAttribArray(0);
84 glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE,
sizeof(
Vertex), (
void*)0);
86 glEnableVertexAttribArray(1);
87 glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE,
sizeof(
Vertex), (
void*)offsetof(
Vertex, Normal));
89 glEnableVertexAttribArray(2);
90 glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE,
sizeof(
Vertex), (
void*)offsetof(
Vertex, TexCoords));
92 glEnableVertexAttribArray(3);
93 glVertexAttribPointer(3, 3, GL_FLOAT, GL_FALSE,
sizeof(
Vertex), (
void*)offsetof(
Vertex, Tangent));
95 glEnableVertexAttribArray(4);
96 glVertexAttribPointer(4, 3, GL_FLOAT, GL_FALSE,
sizeof(
Vertex), (
void*)offsetof(
Vertex, Bitangent));
98 glEnableVertexAttribArray(5);
99 glVertexAttribIPointer(5, 4, GL_INT,
sizeof(
Vertex), (
void*)offsetof(
Vertex, m_BoneIDs));
102 glEnableVertexAttribArray(6);
103 glVertexAttribPointer(6, 4, GL_FLOAT, GL_FALSE,
sizeof(
Vertex), (
void*)offsetof(
Vertex, m_Weights));
104 glBindVertexArray(0);
125 this->material = handle;
126 this->meshHandle = 0;
137 Mesh(std::vector<Vertex>
vertices, std::vector<unsigned int>
indices, MaterialPtr& handle,MeshHandle& meshHandle)
141 this->material = handle;
142 this->meshHandle = meshHandle;
155 glm::vec3* diffuseCol = material->getColor(DIFFUSE_COLOR);
156 glm::vec3* specularCol = material->getColor(SPECULAR_COLOR);
157 glm::vec3* ambientCol = material->getColor(AMBIENT_COLOR);
158 float* shininessValue = material->getShininess();
160 TexturePtr diffuseMap = material->getTexture(DIFFUSE_MAP);
161 TexturePtr specularMap = material->getTexture(SPECULAR_MAP);
162 TexturePtr normalMap = material->getTexture(HEIGHT_MAP);
163 TexturePtr heightMap = material->getTexture(NORMAL_MAP);
165 glUniform1f(glGetUniformLocation(shader.
getProgramId(),
"shininessValue"), *shininessValue);
167 int countTexturesAssigned = 0;
168 if (diffuseMap !=
nullptr) {
169 glUniform1i(glGetUniformLocation(shader.
getProgramId(),
"hasDiffuseMap"), 1);
171 countTexturesAssigned++;
174 glUniform1i(glGetUniformLocation(shader.
getProgramId(),
"hasDiffuseMap"), 0);
175 glUniform3f(glGetUniformLocation(shader.
getProgramId(),
"diffuseColor"), diffuseCol->x, diffuseCol->y, diffuseCol->z);
178 if (specularMap !=
nullptr) {
179 glUniform1i(glGetUniformLocation(shader.
getProgramId(),
"hasSpecularMap"), 1);
181 countTexturesAssigned++;
184 glUniform1i(glGetUniformLocation(shader.
getProgramId(),
"hasSpecularMap"), 0);
185 glUniform3f(glGetUniformLocation(shader.
getProgramId(),
"specularColor"), specularCol->x, specularCol->y, specularCol->z);
188 if (normalMap !=
nullptr) {
189 glUniform1i(glGetUniformLocation(shader.
getProgramId(),
"hasNormalMap"), 1);
191 countTexturesAssigned++;
194 glUniform1i(glGetUniformLocation(shader.
getProgramId(),
"hasNormalMap"), 0);
198 glBindVertexArray(VAO);
199 glDrawElements(GL_TRIANGLES,
static_cast<unsigned int>(
indices.size()), GL_UNSIGNED_INT, 0);
228 void translate(glm::mat4& modelMatrix, glm::vec3 direction);
233 void scale(glm::mat4& modelMatrix,
float val);
239 void rotate(glm::mat4& modelMatrix,
float degree,glm::vec3 direction);
Mesh(std::vector< Vertex > vertices, std::vector< unsigned int > indices, MaterialPtr &handle, MeshHandle &meshHandle)
Definition mesh.h:137