Часть 2
3D – ГРАФИКА
 
Основные теоретические сведения по трехмерной  графике
 
1.  Системы  3D-координат
 
Декартовые системы координат.
Декартовыми прямоугольными координатами точки P в трехмерном пространстве называются взятые с определенным знаком расстояния (выраженные в единицах масштаба) этой точки до трех взаимно перпендикулярных координатных плоскостей или, что то же самое, проекции радиус-вектора r точки P на три взаимно перпендикулярные координатные оси.
В зависимости от взаимного расположения положительных направлений координатных осей возможны левая и правая координатные системы (рис. 1, 2).
Как правило, пользуются правой координатной системой. Положительные направления выбирают: на оси OX - на наблюдателя; на оси OY - вправо; на оси OZ - вверх. Координаты x, y, z называются соответственно абсциссой, ординатой и аппликатой. Координатными поверхностями, для которых одна из координат остается постоянной, здесь являются плоскости, параллельные координатным плоскостям, а координатными линиями, вдоль которых меняется только одна координата, - прямые, параллельные координатным осям. Координатные поверхности пересекаются по координатным линиям. Запись P(a,b,c) означает, что точка Q имеет абсциссу a, ординату b и аппликату c.
 
 
 
Рисунок 1 - Левая координатная система                  Рисунок 2 - Правая координатная система
 
Цилиндрическая система координат.
Для цилиндрических координат координатными поверхностями являются плоскости, перпендикулярные к оси OZ (z=const), полуплоскости, ограниченные осью Z (φ=const) и цилиндрические поверхности, осью которых является ось Z (ρ=const). Координатные линии - линии пересечения этих поверхностей. ρ и φ - полярные координаты проекции точки P на основную плоскость (обычно XOY), z - аппликата - расстояние от точки P до основной плоскости (рис.3).
Формулы для перехода от цилиндрических координат к декартовым:
x=ρ*cos(φ)
y=ρ*sin(φ)
z=z
и обратно:
ρ=sqrt(x2+y2)
φ=arctg(y/x)=arcsin(y/ρ)
 
 
 
Рисунок 3 - Цилиндрическая система координат
 
Сферическая система координат.
Пусть заданы: r - длина радиус-вектора, φ - долгота, θ - полярное расстояние. Положительные направления отсчета показаны на рисунке 4. Если присваивать сферическим координатам значения в следующих пределах:
                                       0 ≤ r < ∞
-π < φ ≤ π
 0 ≤ θ ≤ π
то получаются однозначно все точки пространства.
Координатные поверхности:
- сферы с центром в начале (r=const);
- полуплоскости, ограниченные осью z (φ=const);
- конусы (с вершиной в начале), для которых ось z является осью (θ=const).
Координатные линии - линии пересечения этих поверхностей.
Формулы перехода от сферических координат к декартовым:
x=r*sin(θ)*cos(φ)
y=r*sin(θ)*sin(φ)
z=r*cos(φ)
и обратно:
r=sqrt(x2+y2+z2)
φ=arctg(y/x)
φ=arctg(sqrt((x2+y2)/z))
 
 
 
Рисунок 4 - Сферическая система координат
 
2 Форматы  описания  объектов
 
Под форматом описания объектов понимается способ задания его местоположения в пространстве в математической форме.
В свою очередь, описание самого пространства зависит от принятой системы координат. Для однородной трехмерной системы координат, наиболее распространенной в компьютерной графике, принято задавать координаты в виде матрицы, размером n × 4, например:
 
 
  
Здесь, параметры матрицы x, y, и z – это координаты вершин объекта по осям XY, и Z. Поэтому, количество строк матрицы координат будет соответствовать количеству вершин объекта. Четвертый, дополнительный параметр, равный здесь единице, является масштабирующим множителем, принятым для однородной системы координат.
В современных видеопроектах, работающих в режиме реального времени и использующих насыщенные 3D–сцены, скорость обработки координат объектов, задаваемых в матричной форме, перестала удовлетворять предъявляемым требованиям, даже с применением специальных аппаратных средств. Для ускорения скорости обработки координат объектов применяется сферическая система координат, а формат описания его вершин является векторным.
В компьютерной графике, при использовании векторного представления точек принято дополнительно задавать их направление вращения, такие векторы называются кватернионами.
Кватернион, он же гиперкомплексное число, представляет собой набор четырех чисел.
Имеются различные варианты представления кватернионов: как 4D-вектор, как набор четырех чисел, как число и 3D-вектор, как гиперкомплексное число с тремя мнимыми единицами i, j, k.
Таким образом, имеем следующие способы представления кватернионов:
 
q = [x1, x2, x3, x4] = [scalar,(vector)] = [x1,(x2, x3, x4)] = x1+x2*i+x3*j+x4*k

 
3 Матричные видовые  преобразования  объектов
 
Под базовыми видовыми преобразованиями трехмерных объектов подразумеваются преобразования, которые можно выполнить за один шаг с помощью конкретной матрицы видового преобразования.
Математически преобразование исходных координат объекта с помощью матрицы видового преобразования производится по формуле:
 
                            Мисх × Тпр = Мрез                                                                                        (1)
 
Мисх - это матрица исходных координат графической фигуры, и после преобразования она приобретает вид:
 
 
 
Матрица видового преобразования Тпр в общем виде имеет следующее представление:
 
 
 
Здесь каждый параметр матрицы отвечает за свой, и только свой вид преобразования.
Различают следующие виды преобразования графических обьектов:
- перенос (параметры l, m, n);
- масштабирование (параметры a, e, i, s);
- зеркальное отображение относительно осей или начала координат (параметры a, e, i, s);
- сдвиг (параметры b, c, df, g, h);
- проецирование (параметры p, q, r);
- вращение вокруг осей координат (параметры a, b, c, d, e, f, g, h, i).
Ниже мы подробно рассмотрим работу этих параметров в составе матрицы преобразования.
 
Перенос.
Матрица пространственного переноса трехмерных объектов образуется из матрицы преобразования общего вида (3) и выглядит следующим образом:
 
 
 
Здесь, элементы главной диагонали приравниваются к единице: a=e=i=s=1. Элементы  b, c, p, d, f, q, g, h, r  приравниваются к нулю.
Параметры  l, m, n– параметры переноса. Они отвечают за перенос трехмерных объектов вдоль главных осей координат X, Y, Z соответственно. Если параметры "включены", то это любые вещественные числа, если "выключены", то равны нулю. Произвольная точка пространства  A(x, y, z)  преобразуется с помощью матрицы (4) к виду:
 
 
 
Из соотношения (5) видно, что в результате выполнения операции переноса к координатам исходной точки A прибавляются параметры переноса l, m, n. Характерной особенностью операции переноса является то, что в результате ее действия форма и размеры исходных объектов остаются неизменными. Из этого же соотношения видно, что перенос выполняется в трехмерной системе координат. Однако исходные и преобразованные в результате переноса объекты должны быть представлены на картинной плоскости, в частности на экране монитора персонального компьютера в двумерной системе координат. При этом объекты должны выглядеть объемными.
Эта не простая задача решается с помощью различного вида проекций, таких как аксонометрические, косоугольные, перспективные. С учетом проектирования трехмерный перенос становится многошаговой задачей, которая может быть решена за один шаг, если предварительно получить аналитическое выражение результирующей матрицы. Результирующие матрицы получают последовательным перемножением всех матриц, участвовавших в каждом шаге видовых преобразований.
 
Масштабирование.
Матрица трехмерного масштабирования образуется из матрицы общего вида (3) следующим образом. Все элементы матрицы (3), кроме элементов главной диагонали, приравниваются к нулю.
 
 
 
В матрице (6)  a, e, i, s- параметры масштабирования. Если они "включены", то это любые положительные вещественные числа, если "выключены", то равны единице. Произвольная пространственная точка  A(x, y, z)  с помощью матрицы (6) преобразуется к виду:
 
 
  
Из соотношения (7) следует, что координата  x исходного объекта изменяется прямо пропорционально параметру масштабирования  a, координата  y  изменяется прямо пропорционально параметру e, координата z - прямо пропорционально параметру i. Если эти параметры больше единицы, размеры преобразуемого объекта увеличиваются по соответствующим осям, если указанные параметры меньше единицы - уменьшаются. Параметр  s  изменяет размеры преобразуемого объекта по трем осям одновременно обратно пропорционально своей величине. Если он больше единицы, объект уменьшается по размеру, если меньше - увеличивается.
 
Отображение.
Матрица отображения трехмерных объектов образуется из матрицы общего вида (3) следующим образом. Все элементы матрицы (3), кроме элементов главной диагонали, приравниваются к нулю.
 
 
 
Сравнивая полученную матрицу отображения (8) с ранее полученной матрицей масштабирования (6), видим, что они одинаковы по построению и отличаются между собой лишь численными значениями параметров.
В матрице (8)  a, e, i, s - параметры отображения. Если они "включены", то равны минус единице, если "выключены", то равны единице. Произвольная пространственная точка  A(x, y, z)  с помощью матрицы (8) преобразуется к виду:
 
 
 
Из соотношения (9) следует, что если включен параметр  a, координата  x исходного объекта изменяет свой знак на противоположный. При этом объект отображается относительно координатной плоскости YOZ(X=0). Если включен параметр  e, координата  y  изменяет свой знак на противоположный. При этом объект отображается относительно координатной плоскости  ZOX(Y=0). Если включен параметр  i, координата  z  изменяет свой знак на противоположный. При этом объект отображается относительно координатной плоскости XOY (Z = 0). Если включен параметр  s, тогда все три координаты исходных объектов изменят свой знак на противоположный одновременно. При этом объект отображается относительно начала координат.
Если параметры отображения равны минус единице, это приводит к "зеркальному" отображению объектов. А если параметры равны, например, -2, то в этом случае имеется эффект кривого зеркала в результате совмещения двух видовых преобразований, потому что -2 можно представить как (-1)*2. В этом случае -1 реализует отображение, а 2 реализует изменение масштаба в силу одинаковости матриц масштабирования и отображения.
 
Сдвиг.
Матрица трехмерного сдвига образуется из матрицы общего вида (3) следующим образом. Элементы главной диагонали приравниваются к единице: a=e=i=s=1. Элементы  p, q, r, l, m, n приравниваются к нулю. Преобразованная таким образом матрица (3) и является матрицей трехмерного сдвига (10).
 
 
 
В матрице (10) элементы  b, c, d, f, g, h - параметры сдвига. Если они "включены", то это любые вещественные числа, если "выключены", то равны нулю. Произвольная пространственная точка A(x, y, z) преобразуется с помощью матрицы (10) к виду:
 
 
 
Из соотношения (11) следует, что в результате этой операции к исходным координатам объекта прибавляются произведения параметров сдвига вдоль каждой оси на значения двух других координат. Параметры  d, g сдвигают объект вдоль оси  X  пропорционально координатам Y, Z. Параметры  b, h  сдвигают объект вдоль оси Y пропорционально координатам  X, Z. Параметры  c, f  сдвигают объект вдоль оси Z пропорционально координатам  X, Y.
 
Проецирование.
Матрица проецирования образуется из матрицы общего вида (3) следующим образом. Элементы главной диагонали приравниваются к единице: a=e=i=s=1. Элементы  b, c, d, f, g, r, l, m, n приравниваются к нулю. Преобразованная таким образом матрица (3) и является матрицей проецирования (12).
 
 
   
В матрице (12) элементы  p, q, r - параметры центрального проецирования. Если они "включены", то это любые вещественные числа, если "выключены", то равны нулю. Произвольная пространственная точка A(x, y, z) преобразуется с помощью матрицы (12) к виду:
 
 
 
Более подробно преобразование вида "центральное проецирование" будет рассмотрено в лаб. раб. №9.
 
Вращение.
Матрицы вращения трехмерных объектов вокруг главных осей координат  X, Y, Z  имеют вид:
 
 
 
        В этих матрицах углы  φ,  θ и ψ - это углы поворотов фигуры вокруг осей X, Y и Z.
Матрицы вращения по часовой стрелке отличаются знаками коэффициентов перед множителями, содержащими  sin.
В матрицах вращения реализовываются два вида базовых преобразований: масштабирование и сдвиг.
 
4 Векторные видовые  преобразования  объектов
 
Как уже говорилось в подразделе 2, кватернионы могут быть представлены в одном из таких видов как:

q=[x1, x2, x3, x4]
q=[scalar, (vector)]
q=[x1, (x2, x3, x4)]
q =x1+x2*i+x3*j+x4*k
 
Для каждого из этих видов применяются свои способы преобразований.
Сложение или вычитание двух кватернионов, а также умножение кватерниона на число выполняется как обычно, покомпонентно [14].
С умножением ситуация более сложная. Умножение кватернионов должно в результате дать тоже кватернион, то есть конструкцию, содержащую лишь слагаемые вида r и r*l, где r - действительное число, а l - одна из мнимых единиц. Поэтому необходимо определить операцию умножения для любых двух мнимых единиц. Определяется она так, что умножение получается некоммутативным, т.е. от перестановки мест множителей произведение меняется, и x*y != y*x. Поэтому умножение двух кватернионов приходится выполнять не по обычным правилам арифметики, а по следующим аксиомам:
 
a*(b*c) = (a*b)*c,       (ассоциативность)
(a+b)*c = a*c+b*c,      (транзитивность)
a*(b+c) = a*b+a*c,      (транзитивность)
a*1 = 1*a = a,                (существование единицы)
a*0 = 0*a = 0,                (существование нуля)
i*i = j*j = k*k = -1,        (свойство мнимых единиц)
i*j = -j*i = k.                  (связь между мнимыми единицами i, j, k)
 
Из этих правил следует, что:
 
j*k = -k*j = i,
k*i = -i*k = j,
 
В результате получается таблица умножения комплексных единиц:
 
 
Второй множитель
 
Первый множитель
i
j
k
i
-1
k
-j
j
-k
-1
i
k
j
-i
-1
 
Кроме того, из этих правил можно вывести правило для умножения кватернионов, заданных в форме [scalar,vector]:
 
q1 = [s1, v1],
q2 = [s2, v2],
q1*q2 = [s1*s2 - v1*v2, s1*v2 + s2*v1 + v1xv2].
 
Здесь v1*v2 - скалярное произведение векторов v1, v2; v1xv2 - векторное, все остальные произведения обычные (либо число на число, либо число на вектор).
Кватернионы используются для представления и интерполяции поворотов. Поворот относительно оси (x,y,z) (иными словами, поворот вокруг вектора (x,y,z), проведенного из начала координат) на угол angle представляется кватернионом q, лежащим на единичной 4D-сфере (то есть, 4D-вектором длины 1):
 
s = cos(angle/2),
v = (x,y,z) * sin(angle/2) / |(x,y,z)|,
q = [s,v].
 
В такой форме поворот, соответствующий комбинации поворотов q1 и q2, просто равен их произведению.
 
5 Методы  проецирования  трехмерных объектов  на  картинную  плоскость
 
Для отображения трехмерного объекта на двумерный экран или другое внешнее устройство используется математическое преобразование, называемое проецированием. Точки, определяющие отрезки прямых, кривые и другие элементы проецируются на двумерную плоскость, подобно тому, как кино проецируется на экран в кинотеатре. При этом воображаемая проекционная плоскость, называемая картинной плоскостью, помещается между объектом и наблюдателем, перпендикулярно направлению взгляда. Проводятся проекционные линии от точек объекта к наблюдателю; и точки, где эти линии пересекают картинную плоскость, являются соответствующими точками проекции. Для компьютера относительно легко вычислить эти пересечения. А, получив точки на картинной плоскости, легко перенести результирующее изображение на экран. Более того, меняя место расположения наблюдателя и снова проецируя, можно получить виды объекта с разных сторон.
Проекции распадаются на два основных класса: параллельные и центральные (перспективные).
При параллельном проецировании воображаемые проекционные линии идут параллельно взгляду наблюдателя и далее переводят точки (вершины) трехмерных объектов на двумерную экранную плоскость. Определение местоположения точек осуществляется просто и сводится к вычислению пересечений проекционных линий с картинной плоскостью.
При перспективном проецировании проекционные линии строятся в направлении от точки наблюдения к вершинам объекта и далее к картинной плоскости. Уменьшение размера проекции объекта по мере увеличения расстояния от него до картинной плоскости называется перспективным сокращением.
На рисунке 5 показана структурная схема всех видов плоских проекций.
 
 
 
Рисунок 5 - Основные виды проекций трехмерных объектов
 
Каждая из приведенных на рисунке 5 проекций может быть выполнена на любую главную координатную плоскость: YOZ(X=0), ZOX(Y=0), XOY(Z=0). Таким образом, каждый тип параллельных проекций может выполняться в трех вариантах в зависимости от поставленной задачи. А центральные проекции, кроме этих трех вариантов еще расширяются за счет перестановок и сочетаний центров проекций на главных осях координат.
Подробное рассмотрение всех вышеперечисленных проекций будет произведено в составе лабораторных работ №7, 8, 9, здесь же мы приведем только содержимое матриц проецирования, для сравнения.
 
Матрицы ортографического проецирования:
 
 
 
Матрицы косоугольного проецирования:
 
 
 
Матрицы аксонометрического проецирования на Z=0:
 
 
 
Матрица центрального (перспективного) проецирования:
 
 
  
 
6 Преобразование графических  объектов  с  использованием
результирующих матриц
 
Результирующие матрицы преобразования представляют собой комбинацию из нескольких базовых матриц видовых преобразований (переноса, масштабирования, отображения, сдвига или вращения) и матриц проецирования (ортографического, косоугольного, аксонометрического или центрального).
Математически преобразование исходных координат объекта в какую-либо из его проекций производится по формуле:

                                    Мисх × Трез = Мрез                                                                                         (19)
 
Результирующие матрицы видовых преобразований на плоскость Z=0 составляются по след. схемам:
 
 
  
Здесь матрицы переноса и масштабирования  Тпер  и  Тмашт  (или же другие базовые матрицы) служат для улучшения реалистичности изображения фигуры и не являются обязательными.
Матрица ортографического проецирования Торт должна присутствовоть в обязательном порядке во всех результирующих матрицах, независимо от вида проецирования.