Предположим, что одна из вершин многоугольника равна (x0, y0, z0)
, а вектор направления равен (dx,dy,dz)
.
Точка на линии проекции: (x,y,z) = (x0 + t*dx, y0 + t*dy, z0 + t*dz)
.
Вы хотите найти пересечение этой линии с плоскостью, поэтому подключите ее к уравнению плоскости ax+by+cz+d = 0
и решите для t:
t = (-a*x0 - b*y0 - c*z0 - d) / (a*dx + b*dy + c*dz)
И тогда у вас есть целевая вершина: x = x0+dx*t
и т. Д.
Поскольку это аффинное преобразование, оно может быть выполнено с помощью матрицы 4x4. Вы должны быть в состоянии определить матричные элементы, написав три уравнения для x, y, z как функцию от x0, y0, z0 и взяв коэффициенты.
Например, для х:
x = x0 - (a*dx*x0 + b*dx*y0 + c*dx*z0 + d*dx) / D
x = (1 - a*dx/D)*x0 - (b*dx/D)*y0 - (c*dx/D)*z0 - d*dx/D
Где D = a*dx + b*dy + c*dz
- знаменатель сверху. y и z работают аналогично.
Матрица результатов:
1-a*dx/D -b*dx/D -c*dx/D -d*dx/D
-a*dy/D 1-b*dy/D -c*dy/D -d*dy/D
-a*dz/D -b*dz/D 1-c*dz/D -d*dz/D
0 0 0 1
(Примечание. В Direct3D эту матрицу следует транспонировать, поскольку вместо векторов столбцов используются векторы строк).