什么可以使带有 VBO 的 glDrawArrays 无法绘制任何内容?

发布于 2024-12-12 02:05:33 字数 1126 浏览 0 评论 0原文

我试图弄清楚如何使用 OpenGL 2.0 渲染上下文来使用 VBO。我已经设置了 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 函数指针已全部正确加载。)

I'm trying to figure out how to work with VBOs, using an OpenGL 2.0 rendering context. I've got a 2D (ortho) rendering context set up, and I can draw a simple rectangle like this:

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

But when I try to do it with a VBO, it fails. I set up the VBO like this, with the same data as before:

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;

and I try to draw like this:

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;

From everything I've read, that ought to work. I run it through gDEBugger and there are no GL errors, and the data in the VBO is getting loaded correctly, but nothing actually appears when I swap the buffers. Changing the data in the vertex array to use normalized coordinates (from 0..1.0) also ends up displaying nothing. Any idea what I'm doing wrong? (Assume the render context itself is set up correctly and the GL function pointers have all been loaded correctly.)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

〆凄凉。 2024-12-19 02:05:33

glDrawArrays(GL_QUADS, 0, 1);

看起来您正在尝试绘制具有单个顶点的四边形。您还需要三个:

glDrawArrays(GL_QUADS, 0, 4);

或者切换到点:

glDrawArrays(GL_POINTS, 0, 1);

glDrawArrays(GL_QUADS, 0, 1);

Looks like you're trying to draw a quad with a single vertex. You need three more:

glDrawArrays(GL_QUADS, 0, 4);

Or switch to points:

glDrawArrays(GL_POINTS, 0, 1);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文