レジュメ「三角形メッシュ」の修正および補足                         2012/1/20 金森 MeshLoader::computeSmoothNormals 関数の変数宣言の部分を、 次のように修正してください。 ---------------------------------------------------------------------- void MeshLoader::computeSmoothNormals(int nVerts, const vec3 *verts, vec3 *normals, int nTris, const unsigned int *tris) const { vec3 *faceNormals = new vec3[ nTris ]; // 各頂点の法線ベクトルを格納 //vector *vertexFace = new vector[ nTris ]; vector *vertexFace = new vector[ nVerts ]; // 各頂点の、その頂点を含む面のインデックスを格納 ---------------------------------------------------------------------- この関数の最初の for ループでは、面ごとの法線ベクトル (ただし正規化は不要) を計算し、 faceNormals[] に格納します。それと併せて、三角形 tri を構成する 3 つの頂点 tris[3*tri], tris[3*tri+1], tris[3*tri+2] に対して、 「頂点が三角形 tri に含まれている」という情報を vertexFace[] に登録します。 vertexFace[] は vector の配列です。vector への値の登録には、push_back 関数を使います。 2 番目の for ループでは、各頂点について、vertexFace[] からその頂点を含む 三角形のインデックスを取り出します。そのインデックスから面の法線ベクトルを faceNormals[] から取り出します。その頂点を含むすべての三角形の法線ベクトルを使い、 最終的に正規化された頂点の法線ベクトルを計算します。