Как добавить текстуры в объекты буфера вершин в OpenGL (2.1)

Как правильно текстурировать карту объекта в OpenGL 2.1? В данный момент я выполняю следующие шаги, но не могу заставить текстуру правильно отображаться на объекте.

  1. Создать буфер и сохранить идентификатор
  2. Привязать буфер
  3. Загрузить данные в буфер
  4. Каждый раз, когда объект из буфера отображается:

    4.1. включить GL_TEXTURE_2D, GL_VERTEX_ARRAY а также GL_TEXTURE_COORD_ARRAY

    4.2. Привязать текстуру затем связать буфер

    4.3 Настройка glTexCoordPointer затем настройте glVertexPointer

    4.4 Использование glDrawArrays сделать объект

    4.5 Звонок glFlush

Код для создания VBO:

GLuint flagVBO;
glGenBuffers(1, &flagVBO);
glBindBuffer(GL_ARRAY_BUFFER, flagVBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(flag), (void*) flag, GL_STATIC_DRAW);

Код для рендеринга VBO:

glEnable(GL_TEXTURE_2D);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);

glBindTexture(GL_TEXTURE_2D, gameManager->getTextureManager().getTexture("poleEndFlag")); //The get texture method returns 2 which is the correct texture
glColor3f(1.0, 1.0, 1.0);

glBindBuffer(GL_ARRAY_BUFFER, flagVBO);
glTexCoordPointer(2, GL_FLOAT, sizeof(float)*5, (GLvoid*)3);
glVertexPointer(3, GL_FLOAT, sizeof(float)*5, (GLvoid*)0);
glDrawArrays(GL_QUADS, 0, sizeof(flag) / sizeof(float) / 5);
glFlush();

glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
glDisable(GL_TEXTURE_2D);

массив flagVBO:

flag[120] = {
//Bottom
-0.1, 1.4, 0.025, 1, 1,
-0.8, 1.4, 0.025, 0, 1,
-0.8, 1.4, -0.025, 0, 0,
-0.1, 1.4, -0.025, 1, 0,
//Top
-0.1, 1.95, 0.025, 1, 1,
-0.8, 1.95, 0.025, 0, 1,
-0.8, 1.95, -0.025, 0, 0,
-0.1, 1.95, -0.025, 1, 0,
//Front
-0.1, 1.4, 0.025, 1, 0,
-0.8, 1.4, 0.025, 0, 0,
-0.8, 1.95, 0.025, 0, 1,
-0.1, 1.95, 0.025, 1, 1,
//Back
-0.1, 1.4, -0.025, 1, 0,
-0.8, 1.4, -0.025, 0, 0,
-0.8, 1.95, -0.025, 0, 1,
-0.1, 1.95, -0.025, 1, 1,
//Left
-0.8, 1.95, 0.025, 1, 1,
-0.8, 1.4, 0.025, 0, 1,
-0.8, 1.4, -0.025, 0, 0,
-0.8, 1.95, -0.025, 1, 0,
//Right
-0.1, 1.95, 0.025, 1, 1,
-0.1, 1.4, 0.025, 0, 1,
-0.1, 1.4, -0.025, 0, 0,
-0.1, 1.95, -0.025, 1, 0
}

Похоже, координаты вершины отображаются правильно, а координаты текс — нет. Объект отображается в том же цвете, что и основной цвет текстуры, но всей текстуры там нет.

Изображение показывает визуализированный объект слева и текстуру, которую он должен иметь справа

Изображение показывает визуализированный объект слева и текстуру, которую он должен иметь справа

1

Решение

Ваш указатель координат текстуры неправильный. Смещение в байтов. И 3 байта, которые вы указываете, находятся где-то между координатами x и y ваших позиций вершин. Правильное значение будет

glTexCoordPointer(2, GL_FLOAT, sizeof(float)*5, (GLvoid*) (3*sizeof(GLfloat)) );
2

Другие решения


По вопросам рекламы [email protected]