単純な立方体は、8 つの頂点、36 の法線、および 12 のテクスチャ座標を生成します。
いいえ、単純な立方体には 8 つの位置がありますが、頂点は単なる位置ではなく、他のすべての属性も含んでいます。したがって、実際には頂点の重複は発生しませんが、そのとおりです。属性に冗長性が生じることになります。
なぜそうなのかを説明する更新
頂点は、その属性のベクトル全体です。1 つを変更すると、まったく異なる頂点になります。
純粋に抽象的な属性のセットとテクスチャ座標を使用する頂点シェーダーがあるとします。
#version 150
attribute vec2 foobar;
attribute vec4 fnord;
attribute vec2 texcoord;
この頂点シェーダーは、これらの属性から位置を計算します。
void main() {
gl_Position = vec3(fnord.xw, dot(foobar,texcoord));
}
ご覧のとおり、頂点の位置はすべての属性に直接依存するようになりました。しかし、もちろん、他の変数も同様です。
冗長な計算を保存するために、GPU は頂点属性入力から変換ステージ/頂点シェーダー出力へのキャッシュ マッピングを維持します。頂点がインデックスの間接化によってアクセスされる場合、キャッシュは実際にはインデックスをキーとして使用します。
覚えておいてください: 頂点に関連する何かが変更されると、頂点全体が変更されます。また、最新の OpenGL では、頂点の属性、さらには位置が非常に異なる結果になる可能性があります。
これらの関数は、私のバージョンの openGL に組み込まれていないようです
ああ、彼らはおそらくあなたのドライバーの一部です。おそらく、それらをプログラムにロードしていないだけです。OpenGL DLL は、非常に基本的なことだけをカバーしています。それ以外の場合は、関数ポインターを動的にロードする必要があります。これには GLEW のような素敵なラッパーを使用してください ( http://glew.sourceforge.netで入手できます)。