Enumeration(列挙体)」に含まれる型(値)でこれらを定義しなければならないという点である。「Short2」などは特に顕著で、普通にプログラムを書いていく分には利用しない。「VertexElementFormat列挙体」のメンバーについてはMSDNを参照されたい。MSDN実際問題「Single」は「float」と同義で、フィールドに定義する段階では「float」としても問題ない様子(AppHubのパーティクルサンプルはfloatで宣言されている)。以降の項目「Decralation」の定義時に「VertexElementFormat」の型で定義しなおすので、表記の都合上、分かりやすいように予め「VertexElementFormat」のメンバーで型定義しておいた方が無難である。次項も合わせて確認されたい。頂点宣言VertexDeclarationを定義する頂点宣言「VertexDeclaration」周りが非常にややこしい。「VertexDeclaration」は端的に言えば、その頂点データがどのような構造になっているかを示す値である。プログラムはこのデータを元にして適切に頂点データを管理している。」インターフェースが提供されている。「IVertexType」インターフェースは、「VertexDeclaration」プロパティを提供するインターフェースで、自分で作成したCustom頂点構造体に実装すれば、構造体と頂点宣言(VertexDeclaration)が対応していることを約束できる。VertexDeclarationはVertexElementの配列である「頂点宣言VertexDeclaration」は「頂点要素VertexElement」の配列で構成されている。頂点要素とは、そのデータがどのような値であるかを示す値である。要するに先ほど定義した、構造体のフィールドがどういう値であるか、を示すために必要になる。次のソースコードは取りあえず今回扱うVertexDeclarationの定義とそのVertexElementを示したものである。);VertexDecralationがVertexElementの配列で構成されていることが見て分かる。上から順に先に定義したCustom頂点構造体のフィールド「Corner,Position,Velocity,Random,Time」に対応している。次に「VertexElement」のインスタンス生成に必要な引数について解説する。空のコンストラクタが存在するが、基本的には4つ引数を取ってインスタンスを生成する。offset:オフセットVertexElementFormatVertexElementUsageUsageIndex1番目の引数である「offset:オフセット」が最初にして最大のポイントである。ようするに頂点バッファの先頭から何バイト分、何バイト目のデータが、独自に定義した種類のデータであるかを示すための値となっている。このバイト数は設定値によって変動するので注意する。オフセットのバイト数を決定するのは、引数の2番目に定義する「VertexElementFormat」の値である。」の項目に掲載されている。一応オフセットを計算した結果を掲載している資料が見つからなかったので右の様に表にしておいた(正確性確認のため必ずMSDNを参照されたい)。カスタム頂点構造体に定義したフィールドの型と同じ型を2番目の引数「VertexElementFormat」に設定する。オフセットは1つ前に定義した「VertexElement」に依存して定義される。1つ前の要素の「VertexElementFormat」がVector3だった場合、オフセットは12足される。オフセットは0から始まり定義の度に蓄積して加算されていく。8byte3番目の引数である「VertexElementUsage」は、その頂点データを何の目的で利用するかを示す値である。4番目の引数「UsageIndex」は、3番目の引数「VertexElementUsage」の値が「VertexDecralation」の中で重複した場合に0以外の値を取る。サンプルに上げたソースコードでは、「VertexElementUsage.Position」が重複したので、これを識別するためにそれぞれ0と1の値を与えている。重複しない限り基本的には0を指定しておく。著作権Administrator。