Каков правильный способ текстуры сопоставить объект в OpenGL 2.1? В настоящий момент я выполняю следующие шаги, но не могу заставить текстуру правильно отображаться на объекте.Как добавить текстуры к объектам буфера вершин в OpenGL (2.1)
- Сформировать буфер и хранить идентификатор
- свяжи буфера
- Загрузить данные в буфер
Каждый раз, когда объект из буфера визуализируется:
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
}
Оказывается вершинные координаты делают правильно, но текс координаты этого не делают. Объект имеет тот же цвет, что и основной цвет в текстуре, но всей текстуры там нет.
Изображение показывает обработанную объект слева и текстуры он должен иметь на праве
Вы загружаете изображение в текстуру с помощью 'glTexImage2D'? – Th30n
Да, я. Im довольно уверен, что текстура загружена правильно, потому что объект всегда отображается как основной цвет из того, что когда-либо текстура я пытаюсь использовать. – Tom