В большинстве 3D-графиков точка представлена 4-компонентным вектором (x, y, z, w), где w = 1. Обычные операции, применяемые к точке, включают в себя перевод, масштабирование, поворот, отражение, перекос и их сочетание.
Эти преобразования могут быть представлены математическим объектом, называемым «матрицей». Матрица применяется на векторе, например так:
[ a b c tx ] [ x ] [ a*x + b*y + c*z + tx*w ]
| d e f ty | | y | = | d*x + e*y + f*z + ty*w |
| g h i tz | | z | | g*x + h*y + i*z + tz*w |
[ p q r s ] [ w ] [ p*x + q*y + r*z + s*w ]
Например, масштабирование представлено в виде
[ 2 . . . ] [ x ] [ 2x ]
| . 2 . . | | y | = | 2y |
| . . 2 . | | z | | 2z |
[ . . . 1 ] [ 1 ] [ 1 ]
и перевода как
[ 1 . . dx ] [ x ] [ x + dx ]
| . 1 . dy | | y | = | y + dy |
| . . 1 dz | | z | | z + dz |
[ . . . 1 ] [ 1 ] [ 1 ]
Одной из причин для 4-го компоненты состоит в том, чтобы сделать перевод, представимый матрицей.
Преимущество использования матрицы состоит в том, что множественные преобразования могут быть объединены в одну с помощью матричного умножения.
Теперь, если целью является просто перенос перевода на таблицу, я бы сказал (x, y, z, 1) вместо (x, y, z, w) и произвел последнюю строку матрица всегда [0 0 0 1]
, как обычно для 2D-графики. В самом деле, вектор 4-компонент будет отображаться обратно к нормальному 3-вектор вектора с помощью этой формулы:
[ x(3D) ] [ x/w ]
| y(3D) ] = | y/w |
[ z(3D) ] [ z/w ]
Это называется homogeneous coordinates. Позволяет сделать перспективную проекцию, выражаемую также матрицей,, которая может снова сочетаться со всеми другими преобразованиями.
Например, поскольку объекты на значительном удалении должна быть меньше на экране, мы преобразуем 3D-координаты в 2D, используя формулу
x(2D) = x(3D)/(10 * z(3D))
y(2D) = y(3D)/(10 * z(3D))
Теперь, если мы применим матрицу проекции
[ 1 . . . ] [ x ] [ x ]
| . 1 . . | | y | = | y |
| . . 1 . | | z | | z |
[ . . 10 . ] [ 1 ] [ 10*z ]
то реальное 3D-координаты станут
x(3D) := x/w = x/10z
y(3D) := y/w = y/10z
z(3D) := z/w = 0.1
поэтому нам просто нужно нарезать z - согласовать проект с 2D.
Ознакомьтесь с книгой «Основная математика для игр и интерактивных приложений». –
Нормализованный вектор не «без величины». Нормализованные векторы имеют длину/величину 1. – alesplin
Спасибо! Наверное, я увлекся пониманием. По крайней мере, я был на правильном пути. ;) –