#opengl #vbo #gldrawarrays
#opengl #vbo #gldrawarrays
Вопрос:
У меня проблема с рисованием объекта buffer без индекса. Другие мои проиндексированные VBO отрисовываются нормально…
void drawArray(VertexArrayObject VAO)
{
GL11.glColor3d(1.0f, 0.2f, 0.2f);
GL11.glEnableClientState(GL11.GL_VERTEX_ARRAY);
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, VAO.southSkirtBufferID);
GL11.glDrawArrays(GL11.GL_TRIANGLE_STRIP, 0, VAO.southSkirtLength);
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
GL11.glDisableClientState(GL11.GL_VERTEX_ARRAY);
}
Комментарии:
1. Им владеют, но кем ?
Ответ №1:
Вы не используете свой «буфер юбки» для рисования. В drawArray
вы фактически устанавливаете указатель вершины так, чтобы он указывал на смещение 0 в VAO.vertexBufferID
(что бы это ни было на тот момент. И вы никогда не настраиваете его ни на что другое.
Ссылка на буфер является частью указателя атрибута вершины, для этого указателя будет использоваться текущая привязка GL_ARRAY_BUFFER
на момент gl*Pointer()
вызова. GL_ARRAY_BUFFER
Привязка во время вызова draw абсолютно не имеет значения, и простое изменение этой привязки не влияет на указатели атрибутов.
Если вы рендерите только юбки, произойдет сбой, потому что ваши указатели атрибутов вообще не настроены ни на что полезное.
Комментарии:
1. vertexBufferID и его индекс представляют собой совершенно другой набор данных. Они заполняют большую часть блока, для которого они сгенерированы, за исключением восточного и южного краев, которые я оставляю для буфера skirtBuffer. Буфер юбки — это буфер вершин, который должен отображаться в виде треугольной полосы.
2. Добавление glVertexPointer ранее приводило к ошибкам, но, должно быть, оно было в неправильном месте. Два миллиарда очков для вас!