Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
voprosy_k_MGiG_2013 123456.doc
Скачиваний:
52
Добавлен:
28.03.2015
Размер:
328.19 Кб
Скачать
  1. Реализация проекций в OpenGl

Перспективная проекция определяется командой glFrustum. происходит перемножение текущей матрицы с матрицей перспективной проекции

GlFrustum (left GLdouble, right GLdouble, bottom GLdouble, top GLdouble, near GLdouble, far GLdouble)Эти величины могут быть только положительными.

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

Как вы помните, при центральном проецировании, коэффициент укорачивания зависит от расстояния до центра проекции. Поэтому проекции объектов, расположенных близко к центру проекции, Для устранения данного эффекта необходимо перенести модель вместе с видимым объемом в сторону отрицательной полуоси Z.

gluPerspective( fovy GLdouble,  aspect GLdouble,  near GLdouble,  far GLdouble );

fovy  определяет угол зрения в плоскости yoz, его значение принадлежит диапазону [0.0..180.0];aspect– определяет aspect ratio сечения видимого объема (отношение ширины к высоте). near, far - определяют расстояние до передней (ближней) и задней (дальней) плоскостей отсечения видимого объема. Они также должны быть только положительными.

glOrtho(left GLdouble, right GLdouble, bottom GLdouble, top GLdouble, near GLdouble, far GLdouble);

Как вы помните, для определения ортографического проецирования необходимо определить положение проекционной плоскости, направление проецирования и видимый объем. Рассмотрим рисунок, иллюстрирующий определение данных величин в мировой координатной системе. В OpenGL проекционная плоскость совпадает с плоскостью z=0. Направление проецирования параллельно оси z. Взгляд наблюдателя считается направленным в сторону отрицательной полуоси z.

 Видимый объем имеет форму параллелепипеда. Параметр top определяет положение плоскости, ограничивающей его сверху. Данная плоскость перпендикулярна проекционной плоскости. Параметрыbottom, left, right определяют плоскости, ограничивающие видимый объем соответственно снизу, слева и справа. Эти плоскости также перпендикулярны проекционной плоскости.  

   near, far           - определяют расстояние от начала координат до передней (ближней) и задней (дальней) плоскостей отсечения видимого объема. Расстояния могут быть отрицательными. Обратите внимание на то, что near всегда меньше far. В геометрической интерпретации данное условие можно определить следующим образом: вектор наблюдения сначала пересекает переднюю секущую плоскость, а затем заднюю секущую плоскость. Используя термины ближняя и дальняя секущие плоскости, имеют ввиду положение этих плоскостей относительно наблюдателя, а не начала координат. При определении данных плоскостей, положительными считаются расстояния от начала координат в сторону отрицательной полуоси z, а отрицательными расстояния, отложенные от начала координат в сторону положительной полуоси z.

  1. Определение нормалей и закрашивание методом Гуро

Этот метод предназначен для создания иллюзии гладкой криволинейной поверхности, описанной в виде многогранников или полигональной сетки с плоскими гранями. Если каждая плоская грань имеет одни постоянный цвет, определенный с учетом отражения, то различные цвета соседних граней очень заметны, и поверхность выглядит именно как многогранник. Казалось бы, это дефект можно замаскировать за счет увеличения граней при аппроксимации поверхности. Но зрение человека имеет способность подчеркивать перепады яркости на границах смежных граней – такой эффект называется эффектом полос Маха. Поэтому для создания иллюзии гладкости нужно намного увеличить количество граней, что приводит к существенному замедлению визуализации – чем больше граней, тем меньше скорость рисования объектов. Метод Гуро основывается на идее закрашивания каждой плоской грани не одним цветом, а плавно изменяющимися оттенками, вычисляемыми путем интерполяции цветов примыкающих граней. Закрашивание граней по методу Гуро осуществляется в четыре этапа: - вычисляются нормали к каждой грани; - определяются нормали в вершинах. Нормаль в вершине определяется усреднением нормалей примыкающих граней (рис.3); - на основе нормалей в вершинах вычисляются значения интенсивностей в вершинах согласно выбранной модели отражения света; - закрашиваются полигоны граней цветом, соответствующим линейной интерполяции значений интенсивности в вершинах. Вектор нормали в вершине (а) равен Na=(N1 + N + N3)/3(6)Определение интерполированных значений интенсивности отраженного света в каждой точке грани (и, следовательно, цвет каждого пиксела) удобно выполнять во время цикла заполнения полигона. Рассмотрим заполнение контура грани горизонталями в экранных координатах (рис.4). Интерполированная интенсивность I в точке (X,Y) определяется исходя из пропорции (I-I1)/(X-X1)= (I2-I1)/(X2-X1)(7)ОтсюдаI=I1+(I2-I1)(X-X1)/(X2-X1)                                   (8)Значения интенсивностей I1, I2 на концах горизонтального отрезка представляют сбой интерполяцию интенсивности в вершинах: I1=Ib+(Ic-Ib)(Y-Yb)/(Yc-Yb)I2=Ib+(Ia-Ib)(Y-Yb)/(Ya-Yb)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]