OpenGL - дополнительная линия появляется, когда я рисую границу на кубе - PullRequest
0 голосов
/ 12 декабря 2011

Я пытался понять это некоторое время, но у меня ничего не получается. Мне нужно нарисовать куб, а затем добавить границу вокруг него. Куб работает нормально, и я получил границу для рисования, но всегда вставляется дополнительная линия. Я использую 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-положения) появляется, даже если я отключаю рисование куба в функции отображения. Однако он исчезает, когда я не устанавливаю вершины для куба. Есть идеи, почему это может происходить? Спасибо за любую помощь.

1 Ответ

0 голосов
/ 10 января 2012

Дополнительная строка представляла собой неуместный индекс для буфера, когда он вызывал функцию отображения.По сути, он пытался отобразить данные цвета вместо фактических данных вершины.

...