2012-03-18 40 views
1

我正在寫一個簡單的opengl應用程序的默認窗口大小。到這個窗口,我使用維也納組織繪製一些對象:如何在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) 
+0

除非我完全失去了一些東西 - 爲什麼不通過改變施加給他們的轉型調整你的對象頂點着色器? – 2012-03-18 18:09:06

+0

我不認爲我正在使用頂點着色器 - 我已將我的繪圖功能添加到最初的發佈中。 – memyself 2012-03-18 18:11:16

+3

好吧,請更改您設置的模型視圖轉換。 – 2012-03-18 18:13:03

回答

1

您應該:

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