2011-10-24 15 views
5

私は、OpenGL 2.0のレンダリングコンテキストを使用して、VBOで作業する方法を理解しようとしています。私は、2D(オルト)のレンダリングコンテキストを設定持っている、と私はこのような単純な四角形を描画することができますVBOでglDrawArraysを作成すると、何も描画されません。

glBegin(GL_QUADS); 
    glColor4f(1, 1, 1, 1); 
    glVertex2f(0, 0); 
    glVertex2f(0, 10); 
    glVertex2f(100, 10); 
    glVertex2f(100, 0); 
glEnd; 

しかし、私は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; 

と私はこのような描画しよう:私が読んだすべてのものから

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; 

、それが動作するはずです。私はgDEBuggerを実行し、GLエラーはなく、VBOのデータは正しくロードされていますが、バッファを交換すると実際には何も表示されません。ノーマライズされた座標(0..1.0から)を使用するように頂点配列のデータを変更すると、何も表示されなくなります。私が間違っていることは何か考えていますか? (想定レンダリングコンテキスト自体が正しく設定されており、GLの関数ポインタは全て正しくロードされています。)

答えて

6

glDrawArrays(GL_QUADS, 0, 1);

あなたは、単一の頂点を持つクワッドを描画しようとしているように見えます。あなたは3つのものが必要です

glDrawArrays(GL_QUADS, 0, 4); 

やポイントに切り替える:

glDrawArrays(GL_POINTS, 0, 1); 
+0

ああ、それは頂点の数を必要ですか?私の間違い。私はそれが**要素**の数を必要と思ったので、私は1クワッドを描こうとしていた。それは今働きます! –

関連する問題