2016-10-20 23 views
3

OpenGLで単一の構造体と単一のVBOを使用するオブジェクトに色を追加しようとしています。OpenGL VBOの色は?

typedef struct { 
    float x; 
    float y; 
    float z; 
    float r; 
    float g; 
    float b; 
    float a; 
} Vertex; 

私はすでに私がテストを実行したので、私は、私が欲しいものを得るために正しく座標と色のすべてを設定してることを知っている:これを行うには、私はそれがこのようになります作成したVertex構造体を持っていますglVertex3fglColor4f(これは私が探しているものよりかなり遅かった)を使用して、私のリストに保存している点を引き出し、色を設定する各オブジェクトを繰り返します。しかし、私がVBOを使って描画しようとすると、どこでも色の付いた三角形の巨大な混乱が生じるだけです。

VBOを描く私のレンダリングループの一部は次のようになります。私は間違って何をやっている

glBindBuffer(GL_ARRAY_BUFFER, vbo); 
glEnableClientState(GL_VERTEX_ARRAY); 
glVertexPointer(3, GL_FLOAT, 0, NULL); 
glEnableClientState(GL_COLOR_ARRAY); 
glColorPointer(4, GL_FLOAT, offsetof(Vertex, r), NULL); 
glDrawArrays(GL_TRIANGLES, 0, vertex_amount); 
glBindBuffer(GL_ARRAY_BUFFER, 0); 

?あなたがstrideため0を使用することはできませんのでVertexの配列で

答えて

4
glVertexPointer(3, GL_FLOAT, 0, NULL); 
          ^

位置の値は、緊密にパックされていません。 sizeof(Vertex)を使用してください。

glColorPointer(4, GL_FLOAT, offsetof(Vertex, r), NULL); 
          ^^^^^^^^^^^^^^^^^^^ 

私は...ここで何をしようとしているのか分かりません。おそらく、glVertexPointer()/glColorPointer()の3番目のパラメータはstrideの代わりにpointerと考えていたでしょうか? offsetof()を最終パラメータpointerに移動します。すべて一緒に

glVertexPointer(3, GL_FLOAT, sizeof(Vertex), offsetof(Vertex, x)); 
glColorPointer(4, GL_FLOAT, sizeof(Vertex), offsetof(Vertex, r)); 

あなたはoffsetof()を実施してきた方法に応じvoid*pointerパラメータ値をキャストする必要があります。

関連する問題