Камера / Матрица преобразования просмотра - PullRequest
0 голосов
/ 31 января 2011

Мне было интересно, может ли кто-нибудь показать мне шаги по разработке матрицы преобразования 4x4, которая может быть использована в качестве преобразования просмотра.

Камера находится в точке (1, 2, 2) ^ Tуказывает в направлении (0, 1, 0) ^ T Вектор вверх, который будет отображаться в положительном направлении y на изображении, является направлением (0; 0; 1) ^ T.

Я просмотрел свои заметки и не понимаю, как решить подобные проблемы, поскольку знаю, что они довольно распространены в компьютерной графике.

1 Ответ

1 голос
/ 31 января 2011

Вы можете использовать формулы здесь , просто заполняя матрицы и умножая каждую матрицу одну за другой, пока вы не построите свою матрицу преобразования.(Матрицы вращения там могут быть неправильными, поэтому дважды проверьте формулы здесь .)

Какие проблемы вы пытаетесь решить?Вы действительно не задавали узкий вопрос.

Положение камеры будет установлено с помощью матрицы перевода:

[1 0 0 X]
[0 1 0 Y]
[0 0 1 Z]
[0 0 0 1]

с заменой [1,2,2] ^ T на [X,Y, Z] ^ T

даст вам матрицу перевода:

[1 0 0 1]
[0 1 0 2]
[0 0 1 2]
[0 0 0 1]

Это можно умножить на входной вектор

[x y z 1]^T

для преобразования этой точки,вот так:

[1 0 0 1] [x]  =  x+1
[0 1 0 2] [y]  =  y+2
[0 0 1 2] [z]  =  z+2
[0 0 0 1] [1]  =  1

Для входного вектора [4,5,6,1] это даст [5,7,8,1].

Видите, оно просто перемещается или переводитсявходные данные x, y, z указывают на X, Y, Z, которые мы подключили выше (игнорируя последний компонент на данный момент).

Помните, что матрица M, умноженная на вектор v, дает вам вектор, вызовитеэто p

p = M v

думает об этом как о вызове функции, вроде как p = sin (x), но вместо этого p = M (v), где M - функция преобразования, она оказывается в формематрицы, поскольку преобразования, о которых мы заботимся, могут быть представлены строго линейными операторами, причудливый способ сказать умножение матриц, которое является просто причудливым способом сказать сумму 4скалярные умножения.Чтобы связать эти преобразования матрицы, как если бы они были вызовами функций, просто умножьте их один за другим.(Обратите внимание, что это упрощение, так как нам нужно делать деление для выполнения перспективных преобразований, поэтому мы обманываем и делаем трюки с матрицей 4x4 вместо просто 3x3 - вот что означает странный термин «однородные координаты».)

Есть ли в вашем классе учебник или конспект лекций (если он есть в сети, можете ли вы дать ссылку на него)?Я предположил бы, что материалы охватят другие преобразования и, возможно, приведут примеры.Вы можете попробовать это, умножить некоторый вектор v = [-9 -8 -7] на матрицу 4x4 выше и посмотреть, какой вектор [xyzw] вы получите из него.Затем попробуйте вставить другие значения для матриц вращения.

Вы можете наткнуться на хитрые биты, где вам нужно умножить матрицу вращения на матрицу перевода в правильном порядке: RT будет матрицей, отличной от TR, еслиматрица перевода любая, кроме 0,0,0.

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