Пусть P - матрица проекции вида модели, а c - центр четырехугольника, который вы пытаетесь нарисовать.Вы хотите найти пару векторов u, v, которые определяют ребра вашего четырехугольника,
Q = [ c-u-v, c-u+v, c-u-v, c+u-v ]
, так что u указывает прямо вниз в координатах клипа, а v указывает вправо:
P(u) = (0, s, 0, 0)
P(v) = (s, 0, 0, 0)
Где s - желаемый масштаб вашего четырехугольника.Предположим, что P записано в блочной диагональной форме,
[ M | t ]
P = [-----------]
[ 0 0 1 | 0 ]
Тогда пусть m0, m1 будут первыми двумя строками M. Теперь рассмотрим уравнение, которое мы получили для P (u), подставив и упростив, получим:
[ 0 ]
P(u) ~> M u = [ s ]
[ 0 ]
Что приводит к следующему решению для u, v:
u = s * m1 / |m1|^2
v = s * m0 / |m0|^2