2012-03-18 40 views
1

私は、デフォルトのウィンドウサイズの単純なOpenGLアプリケーションを作成しています。このウィンドウに私はVBOsを使用して、いくつかのオブジェクトを描画:ユーザーは、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) 

は現在、すべてのオブジェクトは、場所に滞在し、リサイズされていません。これは予想される動作なので、オブジェクトを再計算せずにオブジェクトのサイズを変更するのが最善の方法です。それも可能ですか? VBOで直接データのサイズを変更できますか?または、オブジェクトを最初に再計算し、VBOデータを完全に置き換える必要がありますか?私のオブジェクトのサイズは現在、私の最初のウィンドウサイズと に比例しているので、オブジェクトは新しいウィンドウの大きさに従ってサイズ変更する必要があります。それを行う最も簡単な方法は何ですか?

EDIT:ここに私の描画機能があります:

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

私は完全に欠落していない限り、何か - なぜ変換を変更することによって、あなたのオブジェクトのサイズを変更しないでそれらに適用されます頂点シェーダ? –

+0

私は頂点シェーダーを使用しているとは思わない - 最初の投稿に私の描画機能を追加しました。 – memyself

+3

これで、設定したモデルビュー変換が変更されました。 –

答えて

1

あなたはする必要があります

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); // or any other code you currently use to create the model transform 
glScalef(); 
関連する問題