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

标签 delphi opengl

我正在尝试弄清楚如何使用 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 函数指针已全部正确加载。)

最佳答案

glDrawArrays(GL_QUADS, 0, 1);

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

glDrawArrays(GL_QUADS, 0, 4);

或者切换到点:

glDrawArrays(GL_POINTS, 0, 1);

关于delphi - 什么可以使带有 VBO 的 glDrawArrays 无法绘制任何内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7877876/

相关文章:

delphi - 按下鼠标左键时如何更改鼠标光标?

c++ - OBJ 中只有第一个对象有法线

c++ - 无法将纹理应用于 Qt OpenGL 中的顶点网格

c++ - opengl中的对象加载器

opengl - 我可以使用 OpenGL 计算着色器来解析多重采样纹理吗?

delphi - 如何打开和保存大量子表单以对父表单更改使用react?

delphi - Delphi中复制带偏移量的内存

java - java中的opengl加速问题

arrays - 如何在字节数组中搜索 "StringA"?

delphi - D3D9 Hook - 与 Direct3D9 叠加