void drawMesh(vector<mesh_M> &mesh){ mtl_on=1; glUniform1f(shaderProgram->getUniformLocation("mtl_on"), mtl_on); for(int i=0; i<mesh.size(); i++){ assignVBOtoAttribute("vertex", mesh[i].vertices, 4); assignVBOtoAttribute("normal", mesh[i].normals, 4); //color vec3 color_mtl=mesh[i].Kd;//+mesh[i].Ka+mesh[i].Ks; //cout<<"kd "<<loaded[i].Kd.x<<endl; glUniform3fv(shaderProgram->getUniformLocation("color_vec"), 1, value_ptr(color_mtl)); //texture assignVBOtoAttribute("texCoords", mesh[i].texCoords, 2); tex_on=0; if(mesh[i].tex){ glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D,mesh[i].handle); glUniform1i(shaderProgram->getUniformLocation("textureMap"),0); tex_on=1; } glUniform1f(shaderProgram->getUniformLocation("tex_on"), tex_on); glDrawArrays(GL_TRIANGLES, 0, mesh[i].count*3); } }
//Procedura tworz¹ca VAO - "obiekt" OpenGL wi¹¿¹cy numery slotów atrybutów z buforami VBO void setupVAO() { //Wygeneruj uchwyt na VAO i zapisz go do zmiennej globalnej glGenVertexArrays(1, &vao); //Uaktywnij nowo utworzony VAO glBindVertexArray(vao); assignVBOtoAttribute("texCoord", bufTexCoords, 2); assignVBOtoAttribute("vertex", bufVertices, 4); //"vertex" odnosi siê do deklaracji "in vec4 vertex;" w vertex shaderze assignVBOtoAttribute("color", bufColors, 4); //"color" odnosi siê do deklaracji "in vec4 color;" w vertex shaderze assignVBOtoAttribute("normal", bufNormals, 4); //"normal" odnosi siê do deklaracji "in vec4 normal;" w vertex shaderze glBindVertexArray(0); }