Я довольно плохо знаком с OpenGL (и GLSL), и у меня возникла проблема с использованием glTexCoordPointer()
.
У меня загружена текстура, и она корректно рендерится на объекте (один квад), но у меня также появляется еще один квад, который является одним цветом, а не частью загруженной текстуры.
Массивы определены следующим образом:
static const GLfloat obj_vert_buf[] = {
-1, 0, -1,
-1, 0, 1,
1, 0, 1,
1, 0, -1
};
static const GLfloat obj_tex_buf[] = {
0, 0,
0, 1,
1, 1,
1, 0
};
И соответствующий отрывок из функции розыгрыша:
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY_EXT);
glGenBuffers(1, &obj_id);
glTexCoordPointer(2, GL_FLOAT, 0, obj_tex_buf);
glVertexPointer(3, GL_FLOAT, 0, obj_vert_buf);
glDrawArrays(GL_QUADS, 0, sizeof(obj_vert_buf) / sizeof(GLfloat));
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY_EXT);
Насколько я понимаю, первый аргумент glTexCoordPointer()
определяет количество элементов в вершине, которое будет равно двум, как в:
glTexCoord2f(0.0, 0.0);
Второй аргумент - это тип, GLfloat
.
Третий аргумент - это смещение между каждым набором элементов, относящихся к каждой вершине, поэтому равен нулю после двух указанных ранее (я также пробовал это с 2 * sizeof(GLfloat)
без изменений).
И четвертый аргумент - указатель на начало данных, т.е. obj_tex_buf
.
Квадрат правильно отображает , и текстура на нем рисуется правильно, но я получаю еще одну случайную фигуру , отрывающуюся от ее центра и текстурированную неправильно, любые мысли будут великолепны. Дополнительный квадрат не виден без линии glTexCoordPointer()
.