Что вам нужно:
3D-положение и направление для каждого глаза
вы утверждаете, что получили его, но высота и рыскание простоУглы Эйлера и вам также нужны некоторые системы отсчета и порядок преобразований, чтобы преобразовать их обратно в трехмерный вектор.Лучше оставить направление в векторном виде (который, я подозреваю, вы получили в первую очередь).Наряду с направлением, вам также необходимо указать 3D-положение в той же системе координат ...
3D-определение плоскости проекции
, поэтомувам нужно как минимум начальное положение и 2 базисных вектора, определяющих ваш плоский прямоугольник.Гораздо лучше использовать для этого матрицу однородного преобразования 4x4 , потому что это позволяет очень легко преобразовывать ее в локальную систему координат и обратно в нее ...
Итак, я вижу этокак это:
Так что теперь просто найти пересечение между лучами и плоскостью
P(s) = R0 + s*R
P(t) = L0 + t*L
P(u,v) = P0 + u*U +v*V
Решение этой системы будетпривести к получению u,v
, который также является 2D-координатой внутри вашей плоскости, на которую вы смотрите.Конечно, из-за неточностей это не будет разрешимо алгебраически.Поэтому лучше преобразовать лучи в плоские локальные координаты и просто вычислить точку на каждом луче с помощью w=0.0
(делая это простое линейное уравнение с одним неизвестным) и вычислить среднее положение между одним для левого глаза и другим для правого глаза (в случае, если они не выровнены идеально).
поэтому Если R0',R',L0',L'
- преобразованные значения в локальных координатах UVW, то:
R0z' + s*Rz' = 0.0
s = -R0z'/Rz'
// so...
R1 = R0' - R'*R0z'/Rz'
L1 = L0' - L'*L0z'/Lz'
P = 0.5 * (R1 + L1)
Где P
- точка, на которую вы смотритев координатах UVW ...
Преобразование выполняется легко в соответствии с вашими обозначениями, вы либо умножаете обратную или прямую матрицу, представляющую плоскость, на (R,1),(L,1),(R0,0)(L0,0)
.Четвертая координата (0,1
) просто указывает, преобразуете ли вы вектор или точку.
Не зная больше о ваших системах координат, точности данных, а также о том, какие известные и неизвестные вам данные получаются, трудно быть более точным, чем эта.
Если ваша плоскость является плоскостью проецирования камеры, то U,V
являются осями x и y изображения, снятого с камеры, и W является нормальным для него (направление - это просто вопрос записи).
Поскольку вы используете вход камеры, который использует перспективную проекцию, я надеюсь, что ваши позиции и векторы будут исправлены.