【问题标题】:What can make glDrawArrays with a VBO not draw anything?什么可以使带有 VBO 的 glDrawArrays 不绘制任何东西?
【发布时间】:2011-10-25 00:33:35
【问题描述】:

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

【问题讨论】:

    标签: delphi opengl


    【解决方案1】:

    glDrawArrays(GL_QUADS, 0, 1);

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

    glDrawArrays(GL_QUADS, 0, 4);
    

    或者切换到点:

    glDrawArrays(GL_POINTS, 0, 1);
    

    【讨论】:

    • 哦,它需要计算顶点数?我的错;我认为它需要计数 elements,所以我试图绘制 1 个四边形。现在可以了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多