【Unity Procedural Modeling】面の生成
プレイヤーが地面の上の3点を指定して、三角形を生成するとき
Vertex vertex1 = プレイヤーが入力した頂点1; Vertex vertex2 = プレイヤーが入力した頂点2; Vertex vertex3 = プレイヤーが入力した頂点3; var vertices = new Vertex[] { vertex1, vertex2, vertex3 }; var indices = new int[] { 0, 1, 2 };
とすると面が裏返ってしまうことがあります。
これを回避するために、まず面の向きを求めます。
var normal = Vector3.Cross(vertex2 - vertex1, vertex3 - vertex1);
次に、向かせたい方向のベクトルdを与えて
var b = Vector3.Dot(normal, d) > 0; if (b) { indices[0] = 0; indices[1] = 1; indices[2] = 2; } else { indices[2] = 0; indices[1] = 1; indices[0] = 2; }
とすることによって常にベクトルdの方向を向くように面を生成できます。