Прямые. Кривые. Поверхности

реклама
Прямые. Кривые.
Поверхности
Лекция 12.
Алексей Игнатенко
На прошлой лекции
Текстурирование
• Использование изображений для моделирования
(отражающих) свойств поверхности
• Виды текстурирования
– bump mapping, specular mapping, environment mapping, displacement
mapping, transparency mapping
• Отображение текстуры
• Фильтрация текстуры
– Метод ближайшего соседа, Билинейная фильтрация, Мипмэппинг, Трилинейная фильтрация, Анизотропная
фильтрация
Композирование
• Объединение двух или более независимо
подготовленных изображений в одно изображение,
обычно с помощью попиксельного вычисления
полупрозрачности
На лекции
Растеризация прямой и окружности
• Алгоритм Брезенхема
Кривые высших порядков
• Кривые Безье
• B-сплайны
• Рациональные сплайны
Поверхности высших порядков
• B-сплайн поверхности
Поддержка поверхностей высших порядков в
OpenGL
Растеризация прямой и
окружности
Алгоритм Брезенхема (1/4)
Отрезок, соединяющий
P(x1, y1) и Q(x2, y2)
y2  y1
y  y1 
( x  x1 ), x  x1 , x2 
x2  x1
Алгоритм Брезенхема (2/4)
F ( x, y )  ( x  x1 )dy  ( y  y1 )dx
dx  x2  x1
dy  y2  y1
F(x,y) = 0 -- точка на отрезке
F(x,y) < 0 -- точка выше
F(x,y) > 0 -- точка ниже
Точка P определена, тогда
координаты срединной точки
( x p  1, y p  1 / 2)
и значение функции в этой точке
d  F ( x p  1, y p  1 / 2)
Алгоритм Брезенхема (3/4)
Если d < 0, то выбирается Е и
d new  F ( x p  2, y p  12 )
1
1
d new  d old  F ( x p  2, y p  )  F ( x p  1, y p  )
2
2
 E  d new  d old  dy  y 2  y1
Если d  0, то выбирается NE
d new
 NE
3
 F ( x p  2, y p  )
2
 dy  dx  ( y2  y1 )  ( x2  x1 )
В начальной точке
d start  F ( x1  1, y 1 1 / 2) 
( x1  1  x1 )dy  ( y1  1 / 2  y1 )dx 
 dy  dx / 2
Алгоритм Брезенхема (4/4)
Одна неприятность -- деление на 2
Чтобы избежать вещественной
арифметики, сделаем
преобразование
F ' ( x, y )  2 F ( x, y )
d '  2d
d start  2dy  dx
d '  2d
dstart  2dy  dx  3; dNE  4; dE  10
d0 = 10 - 7 = 3 > 0
(NE)
d1 = 3 - 4 = -1 < 0
(E)
d2 = -1 + 10 = 9
(NE)
d3 = 9 - 4 = 5
(NE)
d4 = 5 - 4 = 1
(NE)
d5 = 1 - 4 = -3
(E)
d6 = -3 + 10 = 7
(NE)
Алгоритм Брезенхема (1/4)
(окружность)
Неявное и явное
представление
x y R
2
2
2
y R x
2
2
Параметрическое
представление
x  R cos 
y  R sin 
Алгоритм Брезенхема (2/4)
(окружность)
Алгоритм Брезенхема (3/4)
(окружность)
F ( x, y)  x  y  R
2
Для точки P c коорд.
2
2
(xp , yp )
d old  F ( x p  1, y p  12 )
Для пиксела Е:
1
d new  f ( x p  2, y p  )  d old  (2 x p  3)
2
d E  (2 x p  3)
Для пиксела SE:
d new  d old  (2 x p  2 y p  5)
d SE  (2 x p  2 y p  5)
Алгоритм Брезенхема (4/4)
(окружность)
В начальной точке5 (0, R)
1
1
5
2
2
F (1, R  )  1  ( R  R  )  R   R
2
4
4
5
d0   R
4
И опять нужно исключить вещественные операции.
Сделав замену h = d-1/4, получим h = 1-R.
Тогда необходимо сравнивать h с -1/4, но так как
приращения d – целые числа, то сравнивать
можно с нулем.
Кривые высших порядков
Представление кривых
Явное представление
• y = x(t)
Параметрическое представление
• (x(t), y(t)), t = 0..1
Совокупность точек, интерполяция
• Кривая проходит через все точки
– кубическая, параболическая интерполяция
• Точки определяют только направление изгиба
– кривые Безье, B-сплайны
Кривые высших порядков: постановка задачи
 Задача: построить параметрическую кривую “повторяющую”
заданную ломаную (на плоскости или в пространстве)
Pi , i  0,1,..., N  1.
P3
P1
P2
N 1
P4
P0
Pi  R2 , R3 , R4
Bi (t )  R
Q(t )   Pi Bi (t ), t min  t  t max .
i 0
- контрольные точки
- базисные функции (обычно полиномы некоторой степени)
 Для рисования кривая обычно разбивается на M точек
Q j  Q(u j ), tmin  u0  u1  ...  uM 1 , j  0,1,..., M  1.
Кривые Безье
 Кривые Безье. Степень кривой = N - 1
P3
P1
P2
P0
P4
Bi  C Ni 1t i (1  t ) N 1i , 0  t  1
- полиномы Бернштейна
 Любая контрольная точка Pi оказывает влияние на форму всей
кривой
 Для большого количества точек степень кривой окажется тоже
высокой.
Алгоритм построения кривой
Три контрольные точки
Три контрольные точки (2)
Четыре контрольные точки (1)
Четыре контрольные точки (2)
Задача (1)
Ломаная Безье задана тремя точками (0, 0), (0, 9),
(18, 0). Определите координаты точки на кривой
Безье при t = 1/3.
Задача (2)
Ломаная Безье задана тремя точками (0, 0), (0, 9),
(18, 0). Определите координаты точки на кривой
Безье при t = 1/3.
Кривые высших порядков: B-сплайны
 Задача: построить параметрическую кривую, форма которой
изменяется локально при изменении одной из контрольных точек.
N 1
Q (t )   Pi Bi , p (t ), tmin  t  tmax , 2  p  N  1.
i 0
p - степень B-сплайна.
 Базисные функции рассчитываются по рекуррентным формулам
Кокса-де Бура.
1, ti  t  ti 1 ,
Bi ,0 (t )  
, i  0,1,..., N  p.
0, в противном случае.
Bi ,k (t ) 
(t  ti ) Bi ,k 1 (t )
ti  k 1  ti

(ti  k  t ) Bi 1,k 1 (t )
ti  k  ti 1
, i  0,1,..., N  p  k.
Рациональные сплайны
 Рациональный сплайн является проекцией обычного сплайна из
пространства более высокой размерности (см. однородные
координаты)
[ x, y, z, w]  [ x / w, y / w, z / w]  [ x' , y' , z ' ]
N 1
Q(t ) 
w P'B
i 0
N 1
i i
i, p
w B
i 0
i
i, p
(t )
.
(t )
 Формулы для пересчета нормалей оказываются неверными.
 w > 0 является веcом вершины. Чем больше вес, тем большее
влияние вершина оказывает на форму кривой.
G0, G1 - геометрическая
непрерывность
Два сегмента прямой называются Gk-непрерывными
в точке соединения тогда и только тогда, когда все
векторы i-x (i <= k) производных имеют
совпадающие направления.
Задача
Заданы два звена сплайна a(t) = (t,
t2 + 1) и b =
(2t + 1, t3 + 4t + 2), 0 <= t <= 1.
Обеспечивается ли C0, C1, G1 непрерывность в
точке соединения a(1), b(0)?
Поверхности высших
порядков
Постановка задачи
B-Spline поверхности
 Поверхность строится на основе двух наборов базисных функций
Q(u, v) 
N1 1 N 2 1
 B
i, p
i 0 j 0
(u ) B j , p (v) Pij .
Q(u, v) N1 1 N 2 1 dBi , p (u )

B j , p (v) Pij .
u
du
i 0 j 0
dB j , p (v)
Q(u, v) N1 1 N 2 1
   Bi , p (u )
Pij .
v
dv
i 0 j 0
 Край поверхности является В-сплайном, который определяют
граничные контрольные точки
Q(0, v) 
N1 1
B
i 0
i, p
N 2 1
(0)  B j , p (v) Pij 
j 0
N 2 1
B
j 0
j, p
(v) P0, j .
Поддержка в OpenGL
Рисование геометрических
объектов (1/2)
Перед началом рисования необходимо создать объект
GLUQuadricObj, хранящий режимы рисования объектов GLU
GLUquadricObj *obj = gluNewQuadric();
Для управления режимами рисования предназначены следующие
функции:
gluQuadricDrawStyle
Каркасный или сплошной режим
рисования
gluQuadricOrientation
Направление нормалей
gluQuadricNormals
Режим расчета нормалей
gluQuadricTexture
Рассчитывать или нет текстурные
координаты
gluQuadricNormals(obj, GL_FLAT);
Рисование геометрических
объектов (2/2)
partial disk
disk
sphere
Для рисования объектов предназначены функции gluSphere,
gluCylinder, gluDisk и gluPartialDisk.
gluSphere(obj, 1.0, 20, 10);
Когда объект не нужен, память можно освободить
gluDeleteQuadric(obj);
Рисование кривых и поверхностей
NURBS (1/2)
Перед началом рисования кривой или поверхности NURBS
необходимо создать объект для хранения режимов построения
NURBS
GLUnurbsObj *obj = new gluNewNurbsRenderer();
При помощи функции gluNurbsProperty можно задать режим
разбиения, режим рисования и режимы отсечения кривых и
поверхностей.
Предусмотрены следующие режимы разбиения кривых и
поверхностей:
1. Постоянный шаг по параметрам u и v
2. Адаптивное разбиение в зависимости от длины кривой/площади
поверхности на экране.
3. Адаптивное разбиение в зависимости от ошибки аппроксимации
Рисование кривых и поверхностей
NURBS (2/2)
 Рисование кривой NURBS
Между командами gluBeginCurve и gluEndCurve
вызываются команды gluNurbsCurve для задания
массивов контрольных точек, а также нормалей, цветов и
текстурных координат вершин.
 Рисование поверхности NURBS
Между командами gluBeginSurface и gluEndSurface
вызываются команды gluNurbsSurface для задания
массивов контрольных точек, а также нормалей, цветов и
текстурных координат вершин.
Чайник Юта (1)
Чайник Юта (2)
Итоги
Растеризация прямой и окружности
• Алгоритм Брезенхема
Кривые высших порядков
• Кривые Безье
• B-сплайны
• Рациональные сплайны
Поверхности высших порядков
• B-сплайн поверхности
Скачать