Я довольно новичок в 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
};
И соответствующий отрывок из функции draw:
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
,
Quad отрисовывает правильно и текстура на нем нарисована правильно, но я получаю другая случайная форма если он выйдет из своего центра и будет неправильно текстурирован, любые мысли будут великолепны. Дополнительный квад не виден без glTexCoordPointer()
линия.
От документы:
count
Specifies the number of indices to be rendered.
Таким образом, вы должны позвонить glDrawArrays(GL_QUADS, 0, 4);
Обратите внимание, что GL_QUADS
больше не поддерживается официально с OpenGL 3.1.
Других решений пока нет …