法線の読み込み

インデックスと頂点データが揃えば、最低限の物体描画はできます。ただ、3Dっぽくライティング(照明)処理を行うには、その面(頂点)がどちらを向いているのかを示す法線のデータが必要になります。Xファイルにはそれも格納されているので、さっくっと読み込んでしまいましょう。

08/19の日記に書いたように、今回使っている頂点フォーマットにはNx,Ny,Nzという法線ベクトルを格納するスペースがあるので、そこに法線座標を読み込みます。Meshの中にMeshNormalsという部分があり、そこに座標が書かれている…はず…なのですが…どうも頂点の数と法線の数が合わん…なんでだろう?しかも、その後に法線用のインデックスがずらずらと。いくつかのXファイルを見てみると、どうやら頂点のフェイスの数と、法線のフェイスの数があっているよう。で、法線インデックスの値は法線の数を超えていないよう。ってことで、こんな予想を立てて読み込んでみました。

うわぁ…わかりにくい。超日記クウォリティー…つまり、頂点データにとって必要な法線データは、自分を指している頂点インデックスと同じ番号の法線インデックスの指す法線データをということです。さらにわかりにくい…つまりつまり、「verts[face[i]].Nx = vNormals[NormInd[i]].X;」ってことです。式にすれば、結構すっきりしてますね。

両インデックスの値を見比べてみると、どうもこの予想は正しいようなのでそのまま描画。ん〜一応ちゃんとライティングも出来ているようなのでまぁ、いいか。間違ってたらゴメンナサイm(_ _)m