2011-12-11 114 views
0

我一直在试图弄清楚这一点,但是我失败了。我需要绘制一个立方体,然后在它周围添加一个边框。立方体工作正常,我得到了边框绘制,但总是有一条额外的线条插入。我使用GL_ARRAY_BUFFER存储数据并从GL_TRIANGLES(绘制立方体本身)切换到GL_LINES(绘制轮廓边框)。缓冲区中的每个偏移量都有自己的一组顶点。OpenGL - 当我在立方体上绘制边框时出现额外的线条

我对显示功能(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位置)也会进入。但是,当我没有为立方体设置顶点时,它会消失。任何想法,为什么这可能会发生?感谢任何和所有的帮助。

+0

那么'points'和'points2'包含什么,'cubeLen'和'sidesLen'的值是什么? –

回答

0

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

+0

但我们如何克服这一点? –