У меня проблемы с текстурированием моей 3D-модели, я просто погружаюсь в 3D-модели, поскольку использую базовые примитивы для целей тестирования и работаю над кодом, более специфичным для движка. Однако у меня возникли проблемы с функцией glDrawElements, я знаю, что моя текстура загружена правильно, так как я могу нарисовать ее в четырехугольник (обратите внимание на glBegin в комментариях). Однако при использовании glDrawElements текстура не рисуется. Он показывает цвет части текстуры (желтый), и когда я удаляю код текстурирования, он возвращает 3D-модели последний установленный цвет, поэтому он что-то делает. Я думаю, может быть, это как-то связано с моим glVertexAttributePointer , я понимаю, что делают эти функции.
glMatrixMode(GL_MODELVIEW);
glMultMatrixf(m_Props.WorldMatrix.data);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glEnableVertexAttribArray(2);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(VertexPTN), 0);
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(VertexPTN), (const GLvoid*)12);
glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, sizeof(VertexPTN), (const GLvoid*)20);
glBindBuffer(GL_ARRAY_BUFFER, pExtra->GetVB());
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, pExtra->GetIB());
glScalef(0.05, 0.05, 0.05);
glEnable(GL_TEXTURE_2D);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, pTexExtra->GetTexture());
glDrawElements(GL_TRIANGLES, pExtra->GetIndexCount(), GL_UNSIGNED_INT, 0);
/*glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3f(0.0f, 0.0f, 0.0f);
glTexCoord2f(0, 1); glVertex3f(10.0f, 0.0f, 0.0f);
glTexCoord2f(1, 1); glVertex3f(10.0f, 10.0f, 0.0f);
glTexCoord2f(1, 0); glVertex3f(0.0f, 10.0f, 0.0f);
glEnd();*/
glDisable(GL_TEXTURE_2D);
glDisableVertexAttribArray(2);
glDisableVertexAttribArray(1);
glDisableVertexAttribArray(0);
Мой класс VertexPTN — это просто контейнер для Position, Texture Coordinate и Normal. Итак, я предполагаю, что позиционирование моих векторов в классе идет; Vector3f, Vector2f, Vector3f, я бы установил последний параметр glVertexAttributePointer на 0, 12, 20.
Есть ли какое-то непонимание того, что я упускаю? Я действительно не профессионал в openGL, но я хорошо разбираюсь в настройке и базовом рендеринге. Что заставляет мою текстуру не отображаться в моей сетке, неустановленное состояние GL?
offsetof
ANSI C: en.wikipedia.org/wiki/Offsetof — используйте это для параметра данных VBO. - person datenwolf   schedule 15.05.2012