Проблема с использованием glTexCoordPointer () - PullRequest
0 голосов
/ 01 мая 2018

Я довольно плохо знаком с 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().

1 Ответ

0 голосов
/ 01 мая 2018

Из документов :

count
Specifies the number of indices to be rendered.

Таким образом, вы должны позвонить glDrawArrays(GL_QUADS, 0, 4);

Обратите внимание, что GL_QUADS официально больше не поддерживается с OpenGL 3.1.

...