我正在尝试使用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;
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用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;
Run Code Online (Sandbox Code Playgroud)
我试着像这样画:
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;
Run Code Online (Sandbox Code Playgroud)
从我读过的所有内容中,都应该有效.我通过gDEBugger运行它并且没有GL错误,并且VBO中的数据正在正确加载,但是当我交换缓冲区时实际上没有出现.更改顶点数组中的数据以使用标准化坐标(从0..1.0开始)也不会显示任何内容.知道我做错了什么吗?(假设渲染上下文本身设置正确,GL函数指针都已正确加载.)
glDrawArrays(GL_QUADS, 0, 1);
看起来你正在尝试用单个顶点绘制四边形.你还需要三个:
glDrawArrays(GL_QUADS, 0, 4);
Run Code Online (Sandbox Code Playgroud)
或切换到点:
glDrawArrays(GL_POINTS, 0, 1);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2315 次 |
| 最近记录: |