В моей программе я загружаю модель .obj.Теперь я хочу использовать .mtl для моей модели.Я проанализировал все атрибуты (включая имя файла текстуры - на самом деле я просто хочу отобразить текстуру в моей модели).И я предполагаю, что освещение и наложение текстуры будут выполняться в фрагментном шейдере.Но я очень растерялся, как передать всю информацию о материале моему шейдеру?
У меня есть struct MaterialMTL со всеми значениями, но я не знаю, как это сохранить в VBO.Может быть, мне нужно сделать вектор из всех материалов, которые я проанализировал из .mtl, и сохранить индекс в моей сетке?Но я до сих пор не знаю, как передать все атрибуты моему шейдеру, а также как узнать, нужно ли мне использовать конкретный материал для текущего фрагмента или нет, у меня есть одна сетка для моей модели и что, если я хочуиспользовать материал только для определенных фрагментов ...
Я не смог найти никакой информации об использовании mtl в OpenGL даже для отображения текстуры, поэтому я очень признателен за любую помощь!
Здесьявляется частью моего кода:
void drawMesh(struct Mesh m) {
glBindVertexArray(m.vao);
glDrawArrays(GL_TRIANGLES, 0, m.vert_count);
}
Mesh initMesh(const char * path)
{
Mesh m;
vector<vec3> vertsBuff;
vector<vec2> textBuff;
vector<vec3> normBuff;
MaterialMTL material;
loadOBJ(path, vertsBuff, textBuff, normBuff, material); //So here I'm parsing my obj model with the mtl file (I want to have only one material to start with)
glGenVertexArrays(1, &m.vao);
glBindVertexArray(m.vao);
glEnableVertexAttribArray(0);
glGenBuffers(1, &m.id_vert);
glBindBuffer(GL_ARRAY_BUFFER, m.id_vert);
glBufferData(GL_ARRAY_BUFFER, vertsBuff.size() * sizeof(vec3),
&vertsBuff[0], GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_TRUE, 0, NULL);
glEnableVertexAttribArray(1);
glGenBuffers(1, &m.id_text);
glBindBuffer(GL_ARRAY_BUFFER, m.id_text);
glBufferData(GL_ARRAY_BUFFER, textBuff.size() * sizeof(vec2),
&textBuff[0], GL_STATIC_DRAW);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_TRUE, 0, NULL);
glEnableVertexAttribArray(1);
glGenBuffers(1, &m.id_norm);
glBindBuffer(GL_ARRAY_BUFFER, m.id_norm);
glBufferData(GL_ARRAY_BUFFER, normBuff.size() * sizeof(vec3),
&normBuff[0], GL_STATIC_DRAW);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_TRUE, 0, NULL);
m.vert_count = vertsBuff.size();
return m;
}