Как эффективно изменить размер данных VBO при изменении размера окна OpenGL? - PullRequest
1 голос
/ 18 марта 2012

Я пишу простое приложение 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 Ответ

1 голос
/ 19 марта 2012

Вы должны:

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