Ваш самолет еще не полностью определен. Вам нужен еще один вектор, идущий вдоль плоскости, так называемый касательный вектор. В приведенном выше примере, куда должна указывать ось Y текстуры? Вдоль оси X, вдоль оси Z? Или, может быть, совершенно другая пользовательская ось? Ваш касательный вектор - это вектор, который должен указывать в общем направлении, куда должна идти ось X плоскости.
Допустим, у нас также есть касательный вектор, он не обязательно должен указывать вдоль плоскости. Вы можете построить плоскость следующим образом:
Vector3[] vertices(Vector2 size, Vector3 center, Vector3 normal, Vector3 tangent)
{
Vector3 planeY = Vector3.Normalize(Vector3.Cross(normal, tangent));
Vector3 planeX = Vector3.Normalize(Vector3.Cross(normal, planeY));
planeX *= size.X / 2;
planeY *= size.Y / 2;
vertices = new Vector3[]
{
(center - planeX - planeY),
(center - planeX + planeY),
(center + planeX - planeY),
(center + planeX + planeY),
};
return vertices;
}
planeX и planeY - нормализованные векторы, которые указывают вдоль осей X и Y самой плоскости. Умножив их на размер / 2, мы получим 2 вектора, которые простираются от центра до края плоскости в направлениях X и Y. Сложив эти два вместе по-разному, мы получим четыре угла.
Вот диаграмма, чтобы вы могли получить лучшую картинку в вашей голове. Вектор касательной T"сплющен" на оси X.
![Diagram](https://i.stack.imgur.com/AC0b7.jpg)