Хорошо, я делаю это точно сейчас с помощью своего игрового движка. Что я делаю, чтобы определить, к какому пути обращен многоугольник, так это всегда вести треугольники одинаково. Для меня я всегда провожу их по часовой стрелке. Затем, используя эти треугольники, вычислите нормальный вектор. Вот мой код:
public static Point GetNormalVector(Point p1, Point p2, Point p3)
{
double diff_x = p3.GetExX() - p2.GetExX();
double diff_y = p3.GetExY() - p2.GetExY();
double diff_z = p3.GetExZ() - p2.GetExZ();
double diff_x1 = p1.GetExX() - p2.GetExX();
double diff_y1 = p1.GetExY() - p2.GetExY();
double diff_z1 = p1.GetExZ() - p2.GetExZ();
Point orig = new Point(0, 0, 0);
orig.SetX((diff_y * diff_z1) - (diff_y1 * diff_z));
orig.SetY((diff_z * diff_x1) - (diff_z1 * diff_x));
orig.SetZ((diff_x * diff_y1) - (diff_x1 * diff_y));
NormalizeVector(orig);
return orig;
}
Теперь у нас есть нормальный вектор многоугольника. В зависимости от того, каким способом вы ведете свои треугольники, обычные векторы всегда будут указывать одинаково - в или из. Вы узнаете, в каком направлении они указывают, когда вы вычисляете нормальный вектор. Для меня, по часовой стрелке = вне, против часовой стрелки = в.
Ответит ли это на ваш вопрос?
Хорошо, и вы пытались сделать то, что вы объяснили выше? – nullpointer