OpenGL -当我在立方体上绘制边界时,会出现额外的线

OpenGL - Extra line appears when I draw a border on a cube

本文关键字:边界 立方体 绘制 OpenGL      更新时间:2023-10-16

我一直在试图弄清楚这一点,但我失败了。我需要画一个立方体,然后在它周围加上一个边框。立方体工作得很好,我可以画出边界,但总有一条额外的线插入。我使用GL_ARRAY_BUFFER来存储数据,并从gl_triangle(绘制立方体本身)切换到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的中前位置)。但是,当我不为立方体设置顶点时,它就会消失。知道为什么会这样吗?谢谢大家的帮助。

当调用显示函数时,额外的行是缓冲区的错误索引。基本上,它试图显示颜色数据而不是实际的顶点数据。