Я никогда не использовал ofxopeni, но это лучшее математическое объяснение, которое я могу дать.
Вы можете вращать любой набор данных из одного набора осей в другой, используя матрицу TBN (касательная, битовая, нормальная), где T B и N - ваш новый набор осей. Итак, у вас уже есть данные для нормали, но вам нужно найти касательную. Я не уверен, что ваш Xn3DPlane обеспечивает касательную, но если это так, используйте это.
Битангенс задается как перекрестное произведение нормали и тангенса:
B = T x N
TBN выглядит так:
TBN = { Tx ,Ty ,Tz,
Bx, By, Bz,
Nx, Ny, Nz }
Это будет вращать ваши данные на новом наборе оси, но ваша плоскость также имеет исходную точку, поэтому мы выполнили перевод:
A = {1 , 0 , 0, 0, { Tx , Ty , Tz , 0,
0, 1, 0, 0, Bx , By , Bz , 0,
0, 0, 1, 0, x Nx , Ny , Nz , 0,
-Px,-Py,-Pz,1} 0 , 0 , 0 , 1}
// The multiply the vertex, v, to change it's coordinate system.
v = v * A
Если вы можете получить вещи на этом этапе, вы можете преобразовать все свои точки в новую систему координат. Следует отметить, что нормаль теперь выровнена с осью z, если вы хотите, чтобы она была выровнена с y, поменяйте местами N и B в матрице TBN.
РЕДАКТИРОВАТЬ: окончательный матричный расчет был немного неправильным. Исправлено.
Расчет TBN.