これは主にキャッシュに関するものです。たとえば、4 つの頂点と 4 つの色があるとします。この方法で情報を提供できます (すみませんが、正確な関数名は覚えていません)。
glVertexPointer(..., vertex);
glColorPointer(..., colors);
内部で行うことは、頂点 [0] を読み取り、次に色 [0] を適用し、次に頂点 [1] に色 [1] を適用することです。ご覧のとおり、頂点の長さがたとえば 20 メガバイトの場合、頂点 [0] と色 [0] は少なくとも 20 メガバイト離れています。
一方、{ vertex0, color0, vertex1, color1, etc.} のような構造を提供すると、多くのキャッシュ ヒットが発生します。これは、vertex0 と color0 が一緒であり、vertex1 と color1 も一緒であるためです。
これが質問への回答に役立つことを願っています
編集: 2 回目の読み取りでは、質問に答えていない可能性があります。おそらく、OpenGL がその構造体から読み取る値をどのように認識しているのか疑問に思われるかもしれません。{ vertex, color, vertex, color } のような構造で前に言ったように、頂点が位置 0 で、オフセットが 2 であることを OpenGL に伝えます (つまり、次のものは位置 2、次に 4 などになります)。位置 1 から始まり、オフセットも 2 です (つまり、位置 1、次に 3 など)。
追加: より実用的な例が必要な場合は、このリンクhttp://www.lwjgl.org/wiki/index.php?title=Using_Vertex_Buffer_Objects_(VBO)を参照してください。バッファを一度だけ提供し、オフセットを使用して効率的にレンダリングする方法を確認できます。