Урок 3. Математические Основы OpenGL

20.08.2012

Урок3. Математические Основы OpenGL

Прежде чем приступать к дальнейшему изучению OpenGL необходимо ознакомится с тем, какими данными мы будем в дальнейшем оперировать. Конечно, вы уже знаете что одна вершина модели характеризуется тремся координатами XYZ, однако для того чтобы работать в OpenGL этого недостаточно.

Знакомство с базовыми 3d представлениями данных

Расстояние от начала координатной системы и положение точки в пространстве называется координатой.

Отрезок произвольной длинны, называется вектором. Вектор может быть представлен двумя способами:

  • Заданием компонент вектора.
  • Заданием направления и модуля вектора.

Компонентами вектора A называются длины проекций этого вектора на каждую из осей координат.

Если вкратце, то компоненты вектора – это просто координаты конечной точки вектора. Задание трехмерного вектора в виде компонент математически выглядит как:

Модулем вектора A называется длинна вектора, она равна по абсолютной величине квадратному корню из суммы квадратов компонент вектора. Любой вектор характеризуется направлением, которое задается одним или более углов между выбранными осями координат (ортами) и модулем этого вектора.

Теперь рассмотрим третий ключевое понятие OpenGL– Матрицы. Матрицей называется объект, состоящий из наборов чисел, сгруппированных в столбцы и строки. В основном в DirectXиспользуются четырехрядные матрицы:

Преобразования векторов и операции с ними

Вектора, можно рассматривать как обычные числа, ведь одной переменной можно присвоить целый вектор:

Математические операции с векторами

Так как теперь вектор является своего рода числом, то с ним можно осуществлять различные математические опреции, а именно:

  • Сложение векторов
  • Вычитание векторов
  • Умножение векторов
  • Деление вектора на число

Математически это выглядит следующим образом:

Модуль вектора

Модулем вектора называется длинна вектора, она равна по абсолютной величине квадратному корню из суммы квадратов компонент вектора.

Скалярное и векторное умножении векторов

Умножение векторов отличается от умножения обычных чисел. Во первых, существует два вида умножения векторов: скалярное и векторное.

Результатом скалярного умножения векторов является число, равное косинусу угла между векторами (этот угол определен в плоскости, на которой лежат эти вектора) умноженному на произведение модулей этих векторов:

Результатом векторного умножения вектокторов является вектор,

перпедникулярныйобеим исходным векторам, то есть перпендикулярной плоскости, в которой лежат эти вектора, этот вектор по модулю равен синусу угла между  векторами умноженному на произведение модулей этих векторов.

Норма вектора

Нормой вектора называется модуль вектора.

Нормализованный вектор

Любой вектор, модуль которого равен 1 называется нормализованным на 1 вектором, или просто нормализованным вектором. Такой вектор имеет длину равную единице.

Единичные вектора понадобятся довольно часто. При умножении двух нормализованных векторов мы получаем непосредственно синус или косинус угла между ними, соответственно осуществив операцию арксинус или или арккосинус, мы можем найти угол между векторами.

Также в OpenGL есть такое понятие как нормали к поверхности. Нормалью к поверхности называется единичный вектор, исходящий из определенной вершины поверхности и перпендикулярный этой поверхности. Если поверхность не плоская а вогнутая или выпуклая, то нормали будут подобны в первом случае ежику из векторов, расходящихся в разные стороны, а во втором случае, нормали (если продолжить эти вектора в бесконечность) будут сходится в некую фокусную точку. В любом случае, каждая нормаль будет по возможности перпендикулярна части поверхности, лежащей в непосредственной близости от вершины из которой исходит нормаль.

Символические обозначения векторов

В данных уроках мы иногда будем применять следующие обозначения для векторов. Обычный вектор мы будем обозначать символом стрелки:

Нормализованный вектор, то есть вектор, длинна которого приведена к единице, мы будем обозначать символом, с двумя треугольными стрелками:

Такие обозначения потребуется для сокращенного обозначения векторов при использовании их в формулах.

Преобразования матриц и операции с ними

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

Математические операции с матрицами

Так как теперь матрица является своего рода числом, то с ним можно осуществлять различные математические опреции, а именно:

  • Сложение матриц
  • Вычитание матриц
  • Умножение матриц
  • Деление матрицы на число

Математически это выглядит следующим образом:

При сложении и вычитании все компоненты матрицы просто складываются и вычитаются, умножение матриц выполняется по правилам, установленным для умножения матриц. Результатом умножения двух матриц является третья матрица.

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

Соответственно, такое же неравенство выполняется для любого количества умножений матриц.

Единичная матрица

В матрицах особую роль играет еденичная матрица. Такая матрица имеет следующий вид:

Если умножить какую-то матрицу на единичную, то исходная матрица не изменится. Единичная матрица выполняет такую-жероль как и единица в обычных числах. Единичная матрица является нормализованной, то есть имеет модуль равный единице.

Модуль матрицы

Для матрицы, так же как и для вектора определена операция вычисления модуля. В какой-то мере матрицу можно представлять как псевдо-вектор в некотором четырехмерном пространстве. Хотя представления матрицы как вектор не для всех случаев верны, — так как в одних случаях матрица может соответствовать такому представлению, а в других – нет, — но можно вычислить длину такого вектора, в таком случае модуль матрицы будет представлять из себя длину псевдо-вектора, находящегося в четырехмерном пространстве.

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

Нормализованная матрица

Матрица может быть нормализована на 1, в таких случаях она будет называться нормализованной и её модуль будет равен 1.

Все матрицы вращения являются нормализованными матрицами. При этом сколько вращений бы не происходило, то есть сколько бы таких матриц не перемножалось, их модуль не изменится. Так что последовательность нескльких вращений можно комбинировать в одну матрицу:

Матрицы трансформаций

Трансформации бывают трех видов это:

  • Вращение
  • Масштабирование
  • Перемещение

Матрицы трансформаций пригодятся для помещения объекта в нужное место 3d пространства. Причем последовательность таких операций следующая: Сначала мы масштабируем объект, затем поворачиваем объект на нужный угол, потом перемещаем. Если последовательность будет другая, то результат будет непредсказуем, и где объект окажется в 3d пространстве, вы сможете определить сами, если, конечно найдете этот объект. Матрицы вращения бывают для нескольких осей. В основном нужна матрица для вращения вокруг вертикальной оси, она такая:

Матрица мастшабирования может быть симметричной и несимметричной. Для второго случая матрица выглядит так:

Несимметричное масштабирование означает, что мы вытягиваем объект в одну сторону больше чем в другие. Если вы хотите пропорционально масштабировать объект, то сделайте все компоненты матрицы x, y, z равными друг другу. Матрица для перемещения выглядит так:

Матрицы, используемые в OpenGL

Для того, чтобы осуществить все необходимые преобразования с объектом, в OpenGL существуют три матрицы. Первая из них располагает в нужном месте 3d пространства объект, остальные две используются для правильного размещения объекта с учетом расположения камеры и перспективы. Итак существуют три матрицы:

  • Мировая матрица
  • Матрица камеры
  • Матрица проекций

В системе OpenGL для этих матриц сделаны следующие обозначения: matrix World, View, Projection. Мировая матрица соответственно равна трем матрицам трансформаций, рассмотренным в предыдущем разделе, умноженным друг на друга.

На рисунке представлено влияение матрицы трансформаций: объект был масштабирован и перемещен из начала координат в нужную точку 3d пространства.

Влияение матрицы камеры: все объекты были повернуты таким образом, как будто на них осущствляется взгляд из определенной точки, находящейся в том месте где находится камера.

Влияние матрицы проекций: объекты располагаются и отображается с нужной перспективой.

Заключение

В данном уроке мы произвели небольшой экскурс в математику. Для работы в OpenGL4 без всего этого просто не обойтись. Вы узнали, что кроме обычных чисел существуют также числа в виде векторов и матриц. В математике существует специальный раздел, посвященный векторному и тензорному исчислению, соответственно вы можете найти всю необходимую дополнительную информацию. В следующем уроке мы непосредственно применим полученные навыки и установим матрицы для трансформаций, для камеры и проективную матрицу, результатом чего будет являтся то, что мы будем иметь возможность рассматривать сцену с различных точек трехмерного пространства.

Заполнен: OpenGL4
Присвоен тэг:

avatar

Об Авторе ()

Планета назначения, JO - 8703 - IV, обозначается светлой точкой на объемном экране корабля. К тому времени, как Робоид нанялся на юпитерианский круговой рейс, ему следовало бы стать главным инженером, но после Суховодного пионерского его вышибли, внеся в черный список, и высадили в Луна-Сити за то, что вместо слежения за приборами он провел время, программируя синтезатор пищи корабля строжайше запрещенной корабельными инструкциями последовательностью синтеза пива.

Комментирование закрыто.

Наверх