使用VBO的glDrawArrays为什么可能不会绘制任何内容?

5

我正在尝试学习如何使用VBOs,在OpenGL 2.0渲染环境下。我已经设置好了一个2D(正交)的渲染环境,可以像这样绘制一个简单的矩形:

glBegin(GL_QUADS);
   glColor4f(1, 1, 1, 1);
   glVertex2f(0, 0);
   glVertex2f(0, 10);
   glVertex2f(100, 10);
   glVertex2f(100, 0);
glEnd;

但是当我尝试使用VBO时,它失败了。我像以前一样设置了VBO,并使用相同的数据:

procedure initialize;
const
   VERTICES: array[1..8] of single =
   (
   0, 0,
   0, 10,
   100, 10,
   100, 0
   );
begin
   glEnable(GL_VERTEX_ARRAY);
   glGenBuffers(1, @VBO);
   glBindBuffer(GL_ARRAY_BUFFER, VBO);
   glBufferData(GL_ARRAY_BUFFER, sizeof(VERTICES), @VERTICES[1], GL_DYNAMIC_DRAW);
   glBindBuffer(GL_ARRAY_BUFFER, 0);
end;

我尝试像这样绘制:

begin
   glColor4f(1, 1, 1, 1);
   glEnableClientState(GL_VERTEX_ARRAY);
   glBindBuffer(GL_ARRAY_BUFFER, VBO);
   glVertexPointer(2, GL_FLOAT, 0, 0);
   glDrawArrays(GL_QUADS, 0, 1);
   glBindBuffer(GL_ARRAY_BUFFER, 0);
end;

根据我所了解的,这应该是可以工作的。我已经通过gDEBugger运行它,并且没有GL错误,VBO中的数据被正确加载,但是当我交换缓冲区时实际上什么也没有显示出来。将顶点数组中的数据更改为使用标准化坐标(从0..1.0)也最终导致无法显示任何内容。你有什么想法我做错了什么吗?(假设渲染上下文本身已经设置正确,并且所有GL函数指针已经正确加载)。

1个回答

7
看起来你正尝试用单个顶点绘制一个四边形,你还需要三个顶点:
glDrawArrays(GL_QUADS, 0, 1);
glDrawArrays(GL_QUADS, 0, 4);

或切换到点:

glDrawArrays(GL_POINTS, 0, 1);

哦,需要顶点的数量吗?我的错;我以为它需要元素的数量,所以我试图绘制一个四边形。现在它可以工作了! - Mason Wheeler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接