Я смотрю современное учебное пособие по OpenGL и не до конца понимаю код, который рисует файл .obj.Я имею в виду, что это работает довольно хорошо, но у меня есть небольшая проблема с изменением положения отображаемого объекта.
Вершинные массивы генерируются glGenVertexArrays (), и я думаю, что есть строка, которую я должен изменить, но незнаю, как.
Я использую код:
Mesh::Mesh(const std::string& fileName)
{
InitMesh(OBJModel(fileName).ToIndexedModel());
}
void Mesh::InitMesh(const IndexedModel& model)
{
m_numIndices = model.indices.size();
glGenVertexArrays(1, &m_vertexArrayObject);
glBindVertexArray(m_vertexArrayObject);
glGenBuffers(NUM_BUFFERS, m_vertexArrayBuffers);
glBindBuffer(GL_ARRAY_BUFFER, m_vertexArrayBuffers[POSITION_VB]);
glBufferData(GL_ARRAY_BUFFER, sizeof(model.positions[0]) * model.positions.size(), &model.positions[0], GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, m_vertexArrayBuffers[TEXCOORD_VB]);
glBufferData(GL_ARRAY_BUFFER, sizeof(model.texCoords[0]) * model.texCoords.size(), &model.texCoords[0], GL_STATIC_DRAW);
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, m_vertexArrayBuffers[NORMAL_VB]);
glBufferData(GL_ARRAY_BUFFER, sizeof(model.normals[0]) * model.normals.size(), &model.normals[0], GL_STATIC_DRAW);
glEnableVertexAttribArray(2);
glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, 0, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_vertexArrayBuffers[INDEX_VB]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(model.indices[0]) * model.indices.size(), &model.indices[0], GL_STATIC_DRAW);
glBindVertexArray(0);
}
Мой объект рисует из (0,0,0) позиции, и я хочу, чтобы он был переведен (-1,0f) наОсь YЯ знаю, как переводить матрицы, но не знаю, как справиться с .obj.
РЕДАКТИРОВАТЬ: Спасибо за ваши ответы
Мой код против выглядит следующим образом:
#version 330
uniform mat4 P;
uniform mat4 V;
uniform mat4 M;
layout (location=0) in vec4 vertex;
layout (location=2) in vec2 texCoord;
out vec2 i_tc;
void main(void) {
gl_Position=P*V*M*vertex;
i_tc=texCoord;
}