【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の方向を向くように面を生成できます。