Прямо сейчас я создаю свои геометрические объекты OpenGL - все это каркасные модели - таким образом (упрощенный код):
int fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);
glCompileShader(fragmentShader);
glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success);
element.shaderProgram = glCreateProgram();
glAttachShader(element.shaderProgram, m_gl3VertexShader);
glAttachShader(element.shaderProgram, fragmentShader);
glLinkProgram(element.shaderProgram);
glGetProgramiv(element.shaderProgram, GL_LINK_STATUS, &success);
glDeleteShader(m_gl3VertexShader);
glDeleteShader(fragmentShader);
glGenVertexArrays(1, &element.VAO);
glGenBuffers(1, &element.VBO);
glBindVertexArray(element.VAO);
glBindBuffer(GL_ARRAY_BUFFER, element.VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(centerCrossVertices), centerCrossVertices, GL_STATIC_DRAW);
glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,3*sizeof(float),(void*)0);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
Здесь centerCrossVertices - это один GL_LINE_STRIP с фиксированной длиной.
Позже они нарисованы следующим образом:
glUseProgram(shaderProgram);
glBindVertexArray(m_gl3ElementList[i].VAO);
glDrawArrays(GL_LINE_STRIP,0,centerCrossVertices_size);
Теперь я хочу показать несколько более сложных моделей, которые состоят из нескольких наборов линейных полос, но имеют разную длину.Означает, что есть один объект, который сам не использует одну линейную полосу, но несколько из них, которые могут иметь различное количество вершин, из которых они состоят.
Мой вопрос: должен ли я вызывать верхнюю последовательность для каждый этих линейных полос и нужно ли создавать отдельные VBO / VAO для каждого из них?Или есть способ объединить несколько линейных полос?Если да: как это можно сделать?