加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 什么可以使用VBO的glDrawArrays不能绘制任何东西?

发布时间:2020-12-15 09:29:25 所属栏目:大数据 来源:网络整理
导读:我正在尝试使用OpenGL 2.0渲染上下文来弄清楚如何使用VBO.我已经设置了2D(正交)渲染上下文,我可以绘制一个像这样的简单矩形: glBegin(GL_QUADS); glColor4f(1,1,1); glVertex2f(0,0); glVertex2f(0,10); glVertex2f(100,0);glEnd; 但是当我尝试使用VBO时,它
我正在尝试使用OpenGL 2.0渲染上下文来弄清楚如何使用VBO.我已经设置了2D(正交)渲染上下文,我可以绘制一个像这样的简单矩形:

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

但是当我尝试使用VBO时,它会失败.我像这样设置VBO,使用与以前相同的数据:

procedure initialize;
const
   VERTICES: array[1..8] of single =
   (
   0,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);
   glEnableClientState(GL_VERTEX_ARRAY);
   glBindBuffer(GL_ARRAY_BUFFER,VBO);
   glVertexPointer(2,GL_FLOAT,0);
   glDrawArrays(GL_QUADS,1);
   glBindBuffer(GL_ARRAY_BUFFER,0);
end;

从我读过的所有内容中,都应该有效.我通过gDEBugger运行它并且没有GL错误,并且VBO中的数据正在正确加载,但是当我交换缓冲区时实际上没有出现.更改顶点数组中的数据以使用标准化坐标(从0..1.0开始)也不会显示任何内容.知道我做错了什么吗? (假设渲染上下文本身设置正确,GL函数指针都已正确加载.)

解决方法

glDrawArrays(GL_QUADS,1);

看起来你正在尝试用单个顶点绘制四边形.你还需要三个:

glDrawArrays(GL_QUADS,4);

或切换到点:

glDrawArrays(GL_POINTS,1);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读