Главная страница
Навигация по странице:

  • 4.7. Закрашивание 4.7.1. Функция закрашивания

  • 4.7.2. Метод постоянного закрашивания

  • 4.7.3. Закрашивание методом Гуро

  • 4.7.4. Закрашивание методом Фонга

  • 4.8. Удаление невидимых линий и поверхностей

  • ГРАФИЧЕСКИЙ ИНТЕРФЕЙС ОПЕРАТОРА. Учебное пособие для студентов специальности 220301 Москва 2011 2 Содержание


    Скачать 2.77 Mb.
    НазваниеУчебное пособие для студентов специальности 220301 Москва 2011 2 Содержание
    АнкорГРАФИЧЕСКИЙ ИНТЕРФЕЙС ОПЕРАТОРА.pdf
    Дата10.12.2017
    Размер2.77 Mb.
    Формат файлаpdf
    Имя файлаГРАФИЧЕСКИЙ ИНТЕРФЕЙС ОПЕРАТОРА.pdf
    ТипУчебное пособие
    #10835
    страница8 из 12
    1   ...   4   5   6   7   8   9   10   11   12
    left
    координата левой границы, х
    right
    – координата правой границы) максимальной длины, проходящий через эту точку и целиком содержащийся в области, построить

    93 несложно. После заполнения этого отрезка необходимо проверить точки, лежащие непосредственно над и под ним. Если при этом мы найдем незаполненные пиксели, принадлежащие данной области, то для их обработки рекурсивно вызывается функция.
    Этот алгоритм способен работать с областями самой сложной формы
    (рис. 92).
    Рис. 92. Закраска сложной области по линейкам пикселей
    4.7. Закрашивание
    4.7.1. Функция закрашивания
    Световая энергия, падающая на поверхность от источника света, может быть поглощена, отражена и пропущена. Количество поглощенной, отраженной и пропущенной энергии зависит от длины световой волны. При этом цвет поверхности объекта определяется поглощаемыми длинами волн.
    Свойства отраженного света зависят от формы и направления источника света, а также от ориентации освещаемой поверхности и ее свойств. Свет, отраженный от объекта, может быть диффузным и зеркальным: диффузно отраженный свет рассеивается равномерно по всем направлениям, тогда как зеркальное отражение происходит от внешней поверхности объекта.
    Свет точечного источника отражается от идеального рассеивателя по закону косинусов Ламберта:
    2 0
    ,
    cos







    d
    l
    k
    I
    I
    , где I интенсивность отраженного света;
    A(x,y)
    x
    l
    x
    r

    94
    I
    l
    – интенсивность точечного источника;
    k
    d
    – коэффициент диффузного отражения (константа, 0 ≤ k ≤ 1);
    θ – угол между направлением на источник света и (внешней) нормалью к поверхности (рис. 93).
    Рис. 93. Пример расположения единичных векторов нормали (вектор n) к освещаемой поверхности, вектора определяющего направление на источник (вектор l) и угла меду ними
    (угол θ)
    На объекты реальных сцен падает еще и рассеянный свет, соответствующий отражению света от других объектов. Поскольку точный расчет рассеянного освещения требует значительных вычислительных затрат, в компьютерной графике при вычислении интенсивности поступают так:
    2 0
    ,
    cos










    d
    l
    a
    a
    k
    I
    k
    I
    I
    , где I
    a
    – интенсивность рассеянного света;
    k
    a
    – постоянный коэффициент диффузного отражения рассеянного света,
    0 ≤ k
    a
    ≤ 1.
    Интенсивность света, естественно, зависит от расстояния d от объекта до источника света. Для того чтобы учесть еще и этот фактор, пользуются следующей моделью освещения:

    cos






    k
    d
    k
    I
    k
    I
    I
    d
    l
    a
    a
    , где k произвольная постоянная, обеспечивающая адекватность модели при малых расстояниях до источника освещения.
    Интенсивность зеркально отраженного света зависит от угла падения, длины волны и свойств вещества. Так как физические свойства зеркального отражения довольно сложны, то в простых моделях освещения обычно пользуются следующей эмпирической моделью (моделью Фонга):

    p
    s
    l
    s
    k
    I
    I
    cos

    , где k
    s
    – экспериментальная постоянная;
    α – угол между отраженным лучом и вектором наблюдения;
    р – степень, аппроксимирующая пространственное распределение света.
    n
    l


    95
    Объединяя последние две формулы, получаем окончательно модель (рис.
    94) освещения (функцию закраски), используемую для расчета интенсивности
    (или тона) точек поверхности объекта (т.е. пикселей изображения):
    )
    cos cos
    (


    p
    s
    d
    l
    a
    a
    k
    k
    k
    d
    I
    k
    I
    I








    Рис. 94. Модель освещения
    Функцию закрашивания, используя единичные векторы внешней нормали n, а также единичные векторы, определяющие направления на источник (вектор l), отраженного луча (вектор r) и наблюдения (вектор s), можно записать в виде скалярных произведений:


    p
    s
    d
    l
    a
    a
    k
    k
    k
    d
    I
    k
    I
    I
    )
    ,
    (
    )
    ,
    (
    s
    l
    n
    r






    Замечание: Чтобы получить цветное изображение, необходимо найти
    функции закраски для каждого из трех основных цветов красного, зеленого и
    синего. Поскольку цвет зеркально отраженного света определяется цветом
    падающего, то постоянная k
    s
    считается одинаковой для каждого из этих
    цветов.
    Если точечных источников света несколько (m), модель освещения может быть представлена следующим образом:
    )
    cos cos
    (
    1
    j
    p
    s
    j
    d
    m
    j
    l
    a
    a
    j
    j
    k
    k
    k
    d
    I
    k
    I
    I












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


    s
    l
    n
    r

    96 векторов внешних нормалей на ребрах и в вершинах этой поверхности, то их значения можно найти только приближенно.
    Пусть, например, грани, сходящиеся в данной вершине, лежат в плоскостях, описываемых уравнениями:
    m
    i
    D
    z
    C
    y
    B
    x
    A
    i
    i
    i
    i
    ,
    ,
    1
    ,
    0






    Можно считать, что нормальные векторы этих плоскостей (А
    i

    i

    i
    ),
    i=1,...,m являются векторами внешних нормалей для рассматриваемой многогранной поверхности (если какой-то из нормальных векторов не является внешним, то достаточно поменять знаки его координат на противоположные).
    Складывая эти векторы, получаем вектор, определяющий направление приближенной нормали
    2 1
    4 1
    4 1
    3 1
    3 1
    2 1
    ,
    ,
    V
    V
    V
    V
    V
    V
    V
    V
    V
    V
    V
    V






    m
    i
    i
    i
    i
    C
    B
    A
    C
    B
    A
    1
    )
    ,
    ,
    (
    )
    ,
    ,
    (
    Рис. 95. Представление граней, примыкающих к ребру
    Рис. 96. Многогранная поверхность, заданная вершинами: V
    1
    , V
    2
    , V
    3
    , V
    4
    Замечание. Для определения направления приближенной нормали в точке,
    лежащей на ребре многогранной поверхности, достаточно сложить векторы
    внешних нормалей, примыкающих к этому ребру граней рассматриваемой
    поверхности. Можно поступить и по-иному. А именно, аппроксимировать
    переменный вектор нормали вдоль ребра многогранной поверхности при
    помощи уже найденных векторов внешних нормалей в вершинах, прилегающих
    к рассматриваемому ребру.
    Пусть многогранная поверхность задана своими вершинами. Тогда векторы, определяющие направления приближенных внешних нормалей в ее

    97 вершинах можно найти, используя векторные произведения, построенные на векторах, идущих вдоль ребер, исходящих из соответствующих вершин.
    Например, для того, чтобы определить внешнюю нормаль в вершине V
    1
    , необходимо сложить векторные произведения.
    Замечание. Если перед сложением найденные векторные произведения
    пронормировать, то полученная сумма будет отличаться от предыдущей и по
    длине, и по направлению.
    Для отыскания направления вектора отражения напомним, что единичные векторы падающего света l, нормали к поверхности n и отражения лежат в одной плоскости, причем угол падения равен углу отражения.
    Рассмотрим модель освещения с одним точечным источником и предположим, что свет падает вдоль оси Z. Тогда координаты единичного вектора отражения
    )
    ,
    ,
    (
    z
    y
    x
    r
    r
    r

    r
    определяются по формулам:
    z
    x
    x
    n
    n
    r
    2

    z
    y
    y
    n
    n
    r
    2

    1
    )
    (
    2 2


    z
    z
    n
    r
    , где n= (n
    x
    , n
    y
    , n
    z
    ) – единичный вектор нормали к поверхности.
    Если же свет от источника, падает не по оси аппликат, то проще всего поступить так: выбрать новую координатную систему так, чтобы ее начало совпадало с рассматриваемой точкой, касательная плоскость к поверхности была плоскостью ху, а нормаль к поверхности в этой точке шла вдоль оси Z. В этой новой системе координаты векторов r и l будут связаны соотношениями:
    z
    z
    y
    y
    x
    x
    l
    r
    l
    r
    l
    r





    ,
    ,
    Для того чтобы получить исходные координаты вектора отражения, необходимо выполнить обратное преобразование.
    4.7.2. Метод постоянного закрашивания
    Рассмотрим произвольную сцену, составленную из полигональных
    (многогранных) фигур. Простейший способ ее построения заключается в том, что на каждой из граней выбирается по точке, для нее определяется освещенность, и затем вся грань закрашивается с использованием найденной освещенности. Предложенный алгоритм, который можно назвать алгоритмом
    постоянного закрашивания, обладает, однако, одним большим недостатком: полученное изображение имеет неестественный многогранный вид. Это объясняется тем, что определяемая подобным образом освещенность сцены не является непрерывной величиной, а имеет кусочно-постоянный характер.
    Существуют специальные методы закрашивания, позволяющие создавать иллюзию гладкости. Опишем два известных метода построения сглаженных изображений.

    98
    4.7.3. Закрашивание методом Гуро
    Наиболее простым из таких методов является метод Гуро (Gouraud), который основывается на определении освещенности грани в ее вершинах с последующей билинейной интерполяцией получившихся величин на всю грань.
    Обратимся к рис. 97, на котором изображена выпуклая четырехугольная грань. Предположим, что интенсивности в ее вершинах V
    1
    , V
    2
    , V
    3
    и V
    4
    известны и равны соответственно
    4 3
    2 1
    ,
    ,
    ,
    V
    V
    V
    V
    I
    I
    I
    I
    Рис. 97. Интенсивность, заданная в вершинах выпуклой четырехугольной грани
    Пусть W – произвольная точка грани. Для определения интенсивности
    (освещенности) в этой точке проведем через нее горизонтальную прямую.
    Обозначим через U и V точки пересечения проведенной прямой с границей грани.
    Рис. 98. Линейная интерполяция интенсивности на отрезке прямой, принадлежащей грани, при закрашивании по методу Гуро
    Будем считать, что интенсивность на отрезке UV изменяется линейно
    (рис. 98.), то есть
    V
    U
    W
    I
    t
    I
    t
    I





    )
    1
    (
    , где
    W
    V1
    V2
    V3
    V4
    Произвольная точка
    U
    W
    V
    V1
    V2
    V3
    V4

    99 1
    0
    ,



    t
    UV
    UW
    t
    Для определения интенсивности в точках U и V вновь воспользуемся линейной интерполяцией, также считая, что вдоль каждого из ребер границы интенсивность изменяется линейно.
    Тогда интенсивность в точках U и V вычисляется по формулам
    1 4
    )
    1
    (
    V
    V
    U
    I
    u
    I
    u
    I





    2 1
    )
    1
    (
    V
    V
    V
    I
    v
    I
    v
    I





    , где
    1 0
    ,
    ;
    1 0
    ,
    2 1
    1 1
    4 4






    v
    V
    V
    V
    V
    v
    u
    V
    V
    U
    V
    u
    Метод Гуро обеспечивает непрерывное изменение интенсивности при переходе от одной грани к другой без разрывов и скачков, и позволяет определить интенсивность в каждой точке четырехугольной грани (рис. 99).
    Рис. 99. Выпуклая четырехугольная грань, закрашенная по методу Гуро
    Еще одним преимуществом этого метода является его инкрементальный характер: грань рисуется в виде набора горизонтальных отрезков, причем так, что интенсивность последующего пикселя отрезка отличается от интенсивности предыдущего на величину постоянную для данного отрезка.
    Кроме того, при переходе от отрезка к отрезку значения интенсивности в его концах также изменяются линейно.
    Таким образом, процесс рисования грани слагается из следующих шагов:
    1) проектирование вершин грани на экран;
    2) отыскание интенсивностей в вершинах;
    3) определение координат концов очередного отрезка и значений интенсивности в них линейной интерполяцией;
    4) рисование отрезка с линейным изменением интенсивности между его концами.
    В результате закраска сферы методом Гуро мы получим картину, показанную на рис. 100.
    U
    W
    V
    V1
    V2
    V3
    V4

    100
    Рис. 100. Пример закраски методом Гуро
    4.7.4. Закрашивание методом Фонга
    Как и в методе Гуро, в методе Фонга (Phong) при закраске используется определение интенсивности и интерполирование, но интерполируется не значение интенсивности по уже известным её значениям в опорных точках, а интерполируется значение вектора внешней нормали, которое далее используется для вычисления значения интенсивности каждого пикселя.
    Поэтому закраска требует большего объёма вычислений. Зато изображение получается более реалистичным.
    Для каждой точки строится вектор внешней нормали или его эквивалент.
    Затем этот вектор используется для вычисления освещенности в данной точке по формуле:
    )
    cos cos
    (


    p
    s
    d
    l
    a
    a
    k
    k
    k
    d
    I
    k
    I
    I








    Схема интерполяции при закраске Фонга аналогична интерполяции в закраске Гуро, а именно: для определения вектора нормали в точке Wn
    w
    , через эту точку проводят горизонтальную прямую
    UV
    UW
    t
    t
    -t)
    (
    t
    t
    v
    u
    v
    u
    w









    ,
    1
    )
    1
    (
    n
    n
    n
    n
    n
    Нормали n
    u
    и n
    v
    определяются также с помощью линейной интерполяции по векторам нормали в концевых точках соответствующих рёбер рассматриваемых граней:
    ,
    )
    1
    (
    ;
    ,
    )
    1
    (
    2 1
    2 1
    4 1
    2 4
    1 4
    V
    V
    VV
    v
    v
    v
    V
    V
    UV
    u
    u
    u
    V
    V
    v
    V
    V
    u












    n
    n
    n
    n
    n
    n
    В результате закраски сферы методом Фонга мы получим картину, показанную на рис. 101.

    101
    Рис. 101. Пример закраски методом Фонга
    4.8. Удаление невидимых линий и поверхностей
    Одной из важнейших задач трехмерной графики является следующая: определить, какие части объектов (ребра, грани), находящихся в трехмерном пространстве, будут видны при заданном способе проектирования, а какие будут закрыты от наблюдателя другими объектами. На рис. 102 в качестве примера неправильного удаления невидимых линий показан так называемый куб Эшера, зачастую используемый для демонстрации оптической иллюзии.
    В качестве возможных видов проектирования традиционно рассматриваются параллельное и центральное (перспективное). Само проектирование осуществляется на так называемую картинную плоскость
    (экран): через каждую точку каждого объекта проводится проектирующий луч
    (проектор) к картинной плоскости. Все проекторы образуют пучок либо параллельных лучей (при параллельном проектировании), либо лучей, выходящих из одной точки (центральное проектирование). Пересечение проектора с картинной плоскостью дает проекцию точки. Видимыми будут только те точки, которые вдоль направления проектирования расположены ближе всего к картинной плоскости.
    Несмотря на кажущуюся простоту, задача удаления невидимых линий и поверхностей является достаточно сложной и зачастую требует очень больших объемов вычислений. Поэтому существует целый ряд различных методов решения этой задачи, включая и методы, опирающиеся на аппаратные решения.
    Эти методы различаются по следующим основным параметрам:
    • способу представления объектов;
    • способу визуализации сцены;
    • пространству, в котором проводится анализ видимости;
    • виду получаемого результата (его точности).

    102
    Рис. 102. Куб Эшера как пример неправильного удаления невидимых линий
    В качестве возможных способов представления объектов могут выступать аналитические
    (явные и неявные), параметрические и полигональные. Далее будем считать, что все объекты представлены набором выпуклых плоских граней, например треугольников (полигональный способ), которые могут пересекаться одна с другой только вдоль ребер. Координаты в исходном трехмерном пространстве будем обозначать через (х, у, z), а координаты в картинной плоскости – через (X, Y). Будем также считать, что на картинной плоскости задана целочисленная растровая решетка – множество точек (i,j), где i и j – целые числа.
    Классификация методов удаления невидимых линий и поверхностей приведена на рис. 103.
    Рис. 103. Классификация методов удаления невидимых линий и поверхностей
    Если это не оговорено особо, будем считать для простоты, что проектирование осуществляется на плоскость ОХY. Проектирование при этом происходит либо параллельно оси OZ, т. е. задается формулами:
    Х = х, Y = y, либо является центральным с центром, расположенным на оси OZ, и задается формулами:
    z
    y
    Y
    z
    x
    X

     ,
    Явные
    Неявные
    Аналитические способы
    Параметрические способы
    Полигональные способы
    По способу представления объектов
    Каркасное изображение
    (wireframe)
    Сплошное изображение
    (закраска граней)
    По способу визуализации сцены
    В пространстве объектов
    В картинной плоскости
    По пространству,
    в котором производится анализ видимости
    Непрерывный вид
    Дискретный вид
    По виду получаемого результата
    Методы удаления невидимых линий и поверхностей

    103
    Существуют два различных способа изображения трехмерных тел – каркасное (wireframe – рисуются только ребра) и сплошное (рисуются закрашенные грани). Тем самым возникают два типа задач – удаление невидимых линий (ребер для каркасных изображений) и удаление невидимых поверхностей (граней для сплошных изображений).
    Анализ видимости объектов можно производить как в исходном трехмерном пространстве, так и на картинной плоскости. Это приводит к разделению методов на два класса:
    • методы, работающие непосредственно в пространстве самих объектов;
    • методы, работающие в пространстве картинной плоскости, т. е. работающие с проекциями объектов.
    Получаемый результат представляет собой либо набор видимых областей или отрезков, заданных с машинной точностью (имеет непрерывный вид), либо информацию о ближайшем объекте для каждого пикселя экрана (имеет дискретный вид).
    1   ...   4   5   6   7   8   9   10   11   12


    написать администратору сайта