「インデックスバッファ」の版間の差分
ナビゲーションに移動
検索に移動
imported>Administrator |
Administrator (トーク | 投稿記録) |
||
(他の1人の利用者による、間の2版が非表示) | |||
39行目: | 39行目: | ||
* 頂点バッファは重複排除した4個。 | * 頂点バッファは重複排除した4個。 | ||
* インデックスバッファは上記の頂点バッファの[[添字]]を指す6個 | * インデックスバッファは上記の頂点バッファの[[添字]]を指す6個 | ||
− | + | ||
+ | インデックスバッファが保持しているのは頂点バッファの添字なのでせいぜいInt16かInt32くらいの大きさしかない。 | ||
+ | 上記のような平面の四角形では6頂点が4頂点に減っただけだが、たとえばこれが立方体になると[[頂点バッファ]]だけだと1面6頂点が6面の計36頂点となるのが、インデックスバッファを使えば8頂点で済む。[[スゴーイ!!]] | ||
== 関連項目 == | == 関連項目 == | ||
− | * [[頂点バッファ]] | + | * [[バーテックスシェーダー]] |
+ | * [[バーテックスバッファ]]([[頂点バッファ]]) | ||
+ | * [[インデックスバッファ]] | ||
+ | * [[コンスタントバッファ]] | ||
+ | * [[三角形の秘密についてリークする]] | ||
[[category: 3DCG]] | [[category: 3DCG]] |
2019年11月22日 (金) 01:52時点における最新版
インデックスバッファ(英語:indexed buffer)とは、主に3DCGで使われる用語で、頂点バッファ(頂点データの配列)の無駄をなくすための配列である。
ポリゴンの世界では四角形は「三角形が2個」で表される。 五角形でも六角形でもそれ以上でも基本は「三角形が◯個」という形式になる。 たとえば四角形があるとすると、それは三角形が2個、全部で6頂点のデータになる。
MonoGame風に書くとこんな感じ。
var vertices = new VertexPositionColor[6];
vertices[0] = new VertexPositionColor(new Vector3(-10, -10, 0), Color.Green);
vertices[1] = new VertexPositionColor(new Vector3(-10, +10, 0), Color.Green);
vertices[2] = new VertexPositionColor(new Vector3(+10, -10, 0), Color.Green);
vertices[3] = new VertexPositionColor(new Vector3(-10, +10, 0), Color.Red);
vertices[4] = new VertexPositionColor(new Vector3(+10, +10, 0), Color.Red);
vertices[5] = new VertexPositionColor(new Vector3(+10, -10, 0), Color.Red);
この6頂点のうち、2頂点は重複した値であり、データしては無駄である。 頂点データにはXYZ座標の他にテクスチャ座標や法線なども含まれる。 頂点データ1個1個でいえば今の御時世のパソコン向けのグラフィックボードはメモリ容量もメモリ帯域も豊富なので気にするレベルではないが、ポリゴン数が数万、数十万となると結構バカにできない容量になる。とくにスマートフォン向けにゲームや3Dアプリを開発する場合にはパソコンほど豊富なリソースを積んでいないことも多い。だれもがSnapdragonのハイエンドを使っているわけもなくMediaTekもあればKrinもありOMAPもある。
そこで頂点データにインデックスを付けて重複排除したデータとして保持しようというのがインデックスバッファである。
これもMonoGame風に書くとこんな感じ。
var vertices = new VertexPositionColor[4];
vertices[0] = new VertexPositionColor(new Vector3(-10, -10, 0), Color.Green);
vertices[1] = new VertexPositionColor(new Vector3(-10, +10, 0), Color.Green);
vertices[2] = new VertexPositionColor(new Vector3(+10, -10, 0), Color.Green);
vertices[3] = new VertexPositionColor(new Vector3(+10, +10, 0), Color.Red);
var indeces = new short[6];
indeces[0] = 0; indeces[1] = 1; indeces[2] = 2; // 三角形1
indeces[3] = 0; indeces[4] = 2; indeces[2] = 3; // 三角形2
- 頂点バッファは重複排除した4個。
- インデックスバッファは上記の頂点バッファの添字を指す6個
インデックスバッファが保持しているのは頂点バッファの添字なのでせいぜいInt16かInt32くらいの大きさしかない。 上記のような平面の四角形では6頂点が4頂点に減っただけだが、たとえばこれが立方体になると頂点バッファだけだと1面6頂点が6面の計36頂点となるのが、インデックスバッファを使えば8頂点で済む。スゴーイ!!