如何在调整opengl窗口大小时有效调整VBO数据的大小?

时间:2012-03-18 18:05:20

标签: opengl vbo

我正在编写一个具有默认窗口大小的简单opengl应用程序。在这个窗口中,我使用VBO绘制了一些对象:

points = calc_objects()
vbo_id = GLuint()
glGenBuffers(1, pointer(vbo_id))
data = (GLfloat*len(points))(*points)
glBindBuffer(GL_ARRAY_BUFFER, vbo_id)
glBufferData(GL_ARRAY_BUFFER, sizeof(data), data, GL_STATIC_DRAW)

目前,当用户调整opengl窗口的大小时,所有对象都会保留在原位并且不会调整大小。这是预期的行为,所以我正在调查最好的方法是调整对象大小而不重新计算它们。这甚至可能吗?我可以直接在VBO中调整数据大小吗?或者我是否需要首先重新计算我的对象并完全替换VBO数据?我的对象的大小目前与我的初始窗口大小成正比 因此,应根据新的窗口尺寸调整对象的大小。最简单的方法是什么?

编辑:这是我的绘图功能:

glBindBuffer(GL_ARRAY_BUFFER, vbo_id)
glVertexPointer(2, GL_FLOAT, 0, 0)
glDrawArrays(GL_LINE_STRIP, 0, len(points)/2)

1 个答案:

答案 0 :(得分:1)

你应该:

glMatrixMode(GL_MODELVIEW);
glLoadIdentity(); // or any other code you currently use to create the model transform
glScalef();