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 位置)也会出现。但是,当我不为立方体设置顶点时,它会消失。任何想法为什么会发生这种情况?感谢您的所有帮助。

【问题讨论】:

那么pointspoints2包含什么,cubeLensidesLen的值是什么? 【参考方案1】:

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

【讨论】:

但是我们该如何克服呢?

以上是关于OpenGL - 当我在立方体上绘制边框时出现额外的线条的主要内容,如果未能解决你的问题,请参考以下文章

在渲染纹理上绘制时出现问题。 (OpengL 3.3)

在 WP8 上更改按钮边框颜色时出现延迟

在 OpenGL 中绘制一个实心立方体

Opengl:尝试绘制线条以可视化鼠标射线投射时出现意外行为

当我在 plotly 中绘制气泡图时出现错误

使用 GLM 在 OpenGL 中绘制 2 个立方体