Я пытался понять это некоторое время, но у меня ничего не получается. Мне нужно нарисовать куб, а затем добавить границу вокруг него. Куб работает нормально, и я получил границу для рисования, но всегда вставляется дополнительная линия. Я использую GL_ARRAY_BUFFER для хранения данных и переключаюсь с GL_TRIANGLES (чтобы нарисовать сам куб) на GL_LINES (чтобы нарисовать границы контура). Каждое смещение в буфере имеет свой собственный набор вершин.
Мой код для функции дисплея (GLUT):
// cubeLen = number of cube's vertices in buffer
// sidesLen = number of side vertices in buffer
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glDrawArrays(GL_TRIANGLES, 0, cubeLen);
glDrawArrays(GL_LINES, cubeLen, cubeLen + sidesLen);
glutSwapBuffers();
Мой код для настройки буферов:
GLuint buffer;
glGenBuffers( 1, &buffer );
glBindBuffer( GL_ARRAY_BUFFER, buffer );
glBufferData( GL_ARRAY_BUFFER, sizeof(points) + sizeof(colors)
+ sizeof(points2) + sizeof(colors2),
NULL, GL_STATIC_DRAW );
glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(points), points);
glBufferSubData(GL_ARRAY_BUFFER, sizeof(points), sizeof(colors), colors);
glBufferSubData(GL_ARRAY_BUFFER, sizeof(points) + sizeof(colors),
sizeof(points2), points2);
glBufferSubData(GL_ARRAY_BUFFER, sizeof(points) + sizeof(colors) + sizeof(points2),
sizeof(colors2), colors2);
Я использую 12 треугольников (по 3 вершины в каждом) для каждой стороны куба и 12 линий (24 вершины), чтобы покрыть все ребра. Куб и ребра расположены в центре экрана (по центру 0,0,0). Дополнительная нежелательная линия (которая, кажется, растягивается от центрально-левого 3D-положения до центрального-переднего 3D-положения) появляется, даже если я отключаю рисование куба в функции отображения. Однако он исчезает, когда я не устанавливаю вершины для куба. Есть идеи, почему это может происходить? Спасибо за любую помощь.