Helix Toolkit で WPF を使用してパイプをレンダリングしています。提供された関数が生成する三角形プリミティブが大きすぎて使用できないことに気付きました。
たとえば、赤い三角形がプリミティブである場合、三角形の中央部分 (たとえば) を制御したいとします。私が考えることができる 1 つの方法は、示されているように、赤い三角形を青い三角形にさらに分割することです。この分割を可能にする方法またはアルゴリズムを教えてもらえますか?
Helix Toolkit で WPF を使用してパイプをレンダリングしています。提供された関数が生成する三角形プリミティブが大きすぎて使用できないことに気付きました。
たとえば、赤い三角形がプリミティブである場合、三角形の中央部分 (たとえば) を制御したいとします。私が考えることができる 1 つの方法は、示されているように、赤い三角形を青い三角形にさらに分割することです。この分割を可能にする方法またはアルゴリズムを教えてもらえますか?
public struct Triangle
{
public Vector3 point1;
public Vector3 point2;
public Vector3 point3;
public Triangle(Vector3 p1, Vector3 p2, Vector3 p3)
{
this.point1 = p1;
this.point2 = p2;
this.point3 = p3;
}
}
public static Vector3 getMiddlePoint(Vector3 point1, Vector3 point2)
{
return new Vector3((point1.X + point2.X) / 2.0f, (point1.Y + point2.Y) / 2.0f, (point1.Z + point2.Z) / 2.0f);
}
public static List<Triangle> SplitTriangle(Triangle tri)
{
Vector3 a = getMiddlePoint(tri.point1, tri.point2);
Vector3 b = getMiddlePoint(tri.point2, tri.point3);
Vector3 c = getMiddlePoint(tri.point3, tri.point1);
List<Triangle> NewTris = new List<Triangle>();
NewTris.Add(new Triangle(tri.point1, a, c));
NewTris.Add(new Triangle(tri.point2, b, a));
NewTris.Add(new Triangle(tri.point3, c, b));
NewTris.Add(new Triangle(a, b, c);
return NewTris;
}