В настоящее время я разбираю файл .mtl, связанный с файлом .obj, который у меня есть. Я могу правильно отобразить модель, но как я могу использовать файл .mtl? Где я должен отправить эти ценности? Как его использовать? В настоящее время не удается найти что-либо, использующее файл .mtl в OpenGL. Они просто показывают, как они анализируют его.Основное использование .MTL в OpenGL
EDIT: Как это сделать в OpenGL. Я также создал свой собственный анализатор OBJ. Обратите внимание, что код сокращается только для вас, как я это делаю.
GLuint vao;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
GLuint buffer;
glGenBuffers(1, &buffer);
glBindBuffer(GL_ARRAY_BUFFER, buffer);
glBufferData(GL_ARRAY_BUFFER, cc * sizeof(GLfloat), v, GL_STATIC_DRAW);
GLuint tcbuffer;
glGenBuffers(1, &tcbuffer);
glBindBuffer(GL_ARRAY_BUFFER, tcbuffer);
glBufferData(GL_ARRAY_BUFFER, tcc * sizeof(GLfloat), vt, GL_STATIC_DRAW);
GLuint ncbuffer;
glGenBuffers(1, &ncbuffer);
glBindBuffer(GL_ARRAY_BUFFER, ncbuffer);
glBufferData(GL_ARRAY_BUFFER, ncc * sizeof(GLfloat), vn, GL_STATIC_DRAW);
glEnableVertexAttribArray(m_vert);
glBindBuffer(GL_ARRAY_BUFFER, vbufferid);
glVertexAttribPointer(m_vert, 3, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(m_texcoord);
glBindBuffer(GL_ARRAY_BUFFER, tcbufferid);
glVertexAttribPointer(m_texcoord, 2, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(m_color);
glBindBuffer(GL_ARRAY_BUFFER, cbufferid);
glVertexAttribPointer(m_color, 4, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(m_vertexnormal);
glBindBuffer(GL_ARRAY_BUFFER, ncbufferid);
glVertexAttribPointer(m_vertexnormal, 3, GL_FLOAT, GL_FALSE, 0, 0);
glDrawArrays(GL_TRIANGLES, 0, vc);
Я отредактировал сообщение и просмотрю код, который я добавил. Я просто хочу спросить также, используются ли значения в .MTL специально для шейдеров, таких как Kd? – zyneragetro
Хорошо, что нет «конкретной» вещи об этом :). Значения Kd сообщают вам значения диффузного освещения для материала. Вы можете игнорировать их, если хотите, и вместо этого использовать немодифицированный цвет текстуры, но не будет выглядеть так, как MTL-файл скажет вам, что он должен выглядеть. Поэтому, если вы хотите использовать диффузное значение в шейдере, я думаю, что текстура2D (текстура, texcoord) * Kd сделает трюк. –
Кроме того, из вашего примера кода, к чему вы должны стремиться, если вы хотите использовать несколько материалов, является вызовом glDrawArrays для каждого материала, и вам также понадобится отдельный буфер для каждого вызова (или смещения в одном буфере) , Затем между ними вы вызываете glBindTexture для привязки каждого материала и устанавливаете Kd и другие как однородные цвета, тогда вы делаете магию в шейдере. Это не очень сложно, но для этого требуется умеренное понимание opengl. –