OpenGL - 当我在立方体上绘制边框时出现额外的线条
Posted
技术标签:
【中文标题】OpenGL - 当我在立方体上绘制边框时出现额外的线条【英文标题】:OpenGL - Extra line appears when I draw a border on a cube 【发布时间】:2011-12-11 20:41:35 【问题描述】:我一直在尝试解决这个问题,但我失败了。我需要画一个立方体,然后在它周围添加一个边框。立方体工作正常,我画了边框,但总是有一条额外的线粘在里面。我使用 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 位置)也会出现。但是,当我不为立方体设置顶点时,它会消失。任何想法为什么会发生这种情况?感谢您的所有帮助。
【问题讨论】:
那么points
和points2
包含什么,cubeLen
和sidesLen
的值是什么?
【参考方案1】:
当它调用显示函数时,额外的行是缓冲区的错误索引。基本上,它试图显示颜色数据而不是实际的顶点数据。
【讨论】:
但是我们该如何克服呢?以上是关于OpenGL - 当我在立方体上绘制边框时出现额外的线条的主要内容,如果未能解决你的问题,请参考以下文章