我已经尝试了一段时间,但是我失败了。 我需要绘制一个立方体,然后在其周围添加边框。 多维数据集可以正常工作,并且可以绘制边框,但始终会插入额外的线条。我使用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个顶点)覆盖所有边缘。 立方体和边缘以sycn的形式位于屏幕的中心(以0,0,0为中心)。 即使我在显示功能中禁用绘制立方体,也会出现多余的多余线条(似乎从左中3D位置延伸到中前3D位置)。 但是,当我不为多维数据集设置顶点时,它就会消失。 任何想法为什么会发生这种情况? 感谢您提供的所有帮助。

===============>>#1 票数:0 已采纳

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

  ask by Sefu translate from so

未解决问题?本站智能推荐:

1回复

GLUT_DOUBLE和两个窗口的OpenGL问题

我正在使用Sumanta Guha的代码示例,并试图创建两个窗口。 使用以下代码: 我正在使用Windows 7,通常它应该显示两个窗口。 但是正如您所看到的,只有一个窗口可以正确显示,而另一个窗口似乎不能正常工作。 除了GLUT_DOUBLE和缓冲区交换之外,我还需要采取其他步骤
1回复

OpenGL-鼠标坐标到空间坐标[关闭]

我的目标是在鼠标指向的位置放置一个球体(Z坐标为0)。 我看到了这个问题,但是我还不了解MVP矩阵的概念,因此我做了一些研究,现在有两个问题: 如何从摄像机设置(例如查找,眼睛和向上矢量)创建视图矩阵? 我还阅读了有关几种相机类型的教程,以及有关webgl的一种教程 。
1回复

用鼠标拖动OpenGL绘制矩形?

我正在尝试绘制一个与绘画中的工具类似的形状,在其中拖动它,然后释放鼠标,它将绘制该形状。 当前,我的程序所做的是,如果单击它,它将带有橡皮筋,以向您显示形状,但是在释放鼠标单击时没有绘制任何内容。 相关代码如下: 相关主要代码: 请忽略.s .t和内容,唯一相关的内容
1回复

用鼠标在OpenGL GLUT中绘制多边形

我想通过鼠标交互在openGL Glut中绘制一个多边形,将要进行的每个左键单击都是一个顶点,并且将在每个顶点之间绘制一条线。 当单击鼠标右键时,多边形将关闭,从最后一个顶点到第一个顶点绘制一条线。 我想出了这个,但似乎没有用。 我还试图找出如何添加功能的功能,当我从菜单中进行选择时,我可以从创
1回复

在OpenGL C ++中绘制一个球和两个圆锥

我有一个代码,想一次绘制一个碗和两个圆锥。 但是,它只显示那些圆锥体,而不显示球。 //这是未绘制的球代码。 //球代码结尾
2回复

OpenGL Fog不出现

我已经用谷歌搜索解决方案,但一无所获。 我想创建一个包含一些线的坐标系,并想显示一个带有深度雾的窗口。 我的“雾代码”如下所示: 并且放在init()调用之后和我的display-function-call之前的主函数中(尚不知道这是否会导致任何问题,但只是为了确定)。 对
2回复

在OpenGL中加载纹理时颜色错误

我试图了解如何在OpenGL中加载纹理,我写了这个非常简单的代码: 我使用loadTexture()在内存中加载纹理。 在这个样本中,纹理非常简单,但目前无关紧要。 我想将这个简单的纹理应用到正方形。 我从我已经调用的draw()函数内部调用函数drawTexturedSqu
1回复

在openGL中绘制具有透明度的实心球体

我想绘制一个具有一定透明度的glutSolidSphere ,但它似乎不起作用。 在我的main函数中,我使用以下显示模式初始化: 我在这里错过了什么?
2回复

在OpenGL中渲染火焰

我想基于粒子模拟在OpenGL中渲染一个火焰效果。 我有数百个具有位置和温度(因此颜色)以及所有其他属性的粒子。 简单地使用过剩渲染solidSphere看起来不太现实,因为粒子传播得太宽。 如何根据粒子信息绘制火焰?
3回复

RGBA整数值到OpenGL纹理

我正在用C ++写一个射线投射器,它将其结果输出到常规图像文件中。 现在,我想将内部RGBA表示(4个整数)呈现到GLUT提供的OpenGL窗口中。 我已经知道我必须使用glTexImage2D生成纹理,将该纹理分配给一个四边形,然后在相机前面渲染该四边形。 http://www.