Вращение камеры, используемой для перспективной проекции - PullRequest
2 голосов
/ 02 декабря 2009

Я пытаюсь выполнить простую перспективную проекцию различных трехмерных структур, определенных как множество трехмерных многоугольников (разных z), каждый из которых содержит множество точек. Структура будет просматриваться рядом различных камер, которые я определяю. Эти камеры определяются путем помещения мировой камеры (глаза) в (0,0, z) в мои мировые координаты, просмотра (0,0,0) и вверх (0,1,0) и вращения мировых осей на альфа ( около оси x), бета (около y) и гамма (около z), тем самым создавая мою локальную систему координат для этой конкретной камеры. [Я понимаю, что могу сделать это с OpenGL, но я хочу попробовать сделать это сам и понять, а не использовать черный ящик]

Основа моей глобальной камеры определяется с помощью векторов u, v и w, где w = (взгляд) .normalised = (0,0,1); u = up.cross (w) = (1,0,0) и v = w.cross (u) = (0,1,0)

Я работаю с однородными координатами, поэтому моя матрица преобразования для u_dashed, v_dashed, w_dashed выглядит следующим образом:

T (px, py, pz) = [1,0,0, px; 0,1,0, py; 0,0,1, pz; 0,0,0,1] и R = [u , 0; v, 0; ш, 0; 0,0,0,1]

так что сложив все вместе, я получаю

Tr = T (взгляд) x R 'x R_zyx x R x T (- (взгляд глазами)), где R' - транспонирование R, а R_zyx - комбинированная матрица прямого вращения (мир => локальные координаты) ) Затем я умножаю матрицу ортогональной проекции (O) на матрицу перспективного преобразования (P) (http://www.cs.uu.nl/docs/vakken/gr/Slides/06-projection.pdf), чтобы определить комбинированное преобразование:

C = O x P x Tr

Наконец, proj = (C x 4Dpoint) и разделить перспективу, т.е. (proj.x / proj.w, proj.y, pro.w)

Или мне лучше определить координаты каждой камеры, т.е. R_zyx x [0; 0; z; 1] и u, v и w, по Rzyx x [ux, vx, wx, 0; uy, vy, wy , 0, UZ, уг, WZ, 0; 0,0,0,0]

?

1 Ответ

1 голос
/ 03 декабря 2009

хорошо, я думаю, что теперь я правильно понял, но приветствовал бы любые комментарии / конструктивную критику.

Mv (посмотреть матрицу) (как здесь определено http://www.cs.uu.nl/docs/vakken/gr/Slides/06-projection.pdf) = T (взгляд) x R 'x R_zyx x R x T (- (взгляд)) x T (- (взгляд)) = [u ', 0; v', 0, w ', 0; 0,0,0,1]' x T (- (взгляд))

C = O x P x Mv

Тогда 4Dproj = C x [4Point] 'и 2Dproj = (4proj.x / 4proj.w, 4proj.y / 4proj.w)

ура

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...