Моделирование 3D сцен с применением OpenGL

Содержание

Слайд 2

Виды проектирования. Алгоритмы удаления невидимых линий и поверхностей. Преобразования координат, проектирование

Виды проектирования.
Алгоритмы удаления невидимых линий и поверхностей.
Преобразования координат, проектирование и алгоритм

Z-буфера в OpenGL.
Визуализация 3D объектов и подключение библиотеки Glut.

Моделирование 3D сцен с применением графической библиотеки OpenGl

Слайд 3

МЕТОДЫ И АЛГОРИТМЫ ТРЕХМЕРНОЙ ГРАФИКИ

МЕТОДЫ И АЛГОРИТМЫ ТРЕХМЕРНОЙ ГРАФИКИ

Слайд 4

Проекции в OpenGL glOrtho(left, right, bottom, top, near, far: GLdouble) gluOrtho2D(left,

Проекции в OpenGL

glOrtho(left, right, bottom, top, near, far: GLdouble)
gluOrtho2D(left, right,

bottom, top: GLdouble)

gluPerspective(fovy,aspect,
near, far)

Слайд 5

Перспективные преобразования в OpenGL glFrustum (Xmin, Xmax, Ymin, Ymax, near, far)

Перспективные преобразования в OpenGL

glFrustum (Xmin, Xmax, Ymin, Ymax, near, far)


Слайд 6

УДАЛЕНИЕ НЕВИДИМЫХ ЛИНИЙ И ПОВЕРХНОСТЕЙ

УДАЛЕНИЕ НЕВИДИМЫХ
ЛИНИЙ И ПОВЕРХНОСТЕЙ

Слайд 7

Рисуем единичный куб

Рисуем единичный куб

Слайд 8

Рисуем единичный куб

Рисуем единичный куб

Слайд 9

Алгоритм Z-буфера Без применения буфера глубины С применением буфера глубины

Алгоритм Z-буфера

Без применения
буфера глубины

С применением
буфера глубины

Слайд 10

glPolygonMode(face, mode :GLenum) face: GL_FRONT GL_BACK GL_FRONT_AND_BACK Mode: GL_POINT GL_LINE GL_FILL Методы отображения

glPolygonMode(face, mode :GLenum)
face:
GL_FRONT
GL_BACK
GL_FRONT_AND_BACK
Mode:
GL_POINT
GL_LINE
GL_FILL

Методы отображения

Слайд 11

Сфера Glut glutSolidSphere(radius, slices, stacks) glutWireSphere(radius, slices, stacks)

Сфера Glut

glutSolidSphere(radius, slices, stacks)
glutWireSphere(radius, slices, stacks)

Слайд 12

Куб Glut glutSolidCube(size) glutWireCube(size)

Куб Glut

glutSolidCube(size)
glutWireCube(size)

Слайд 13

Конус Glut glutSolidCone(base, height, slices, stacks) glutWireCone(base, height, slices, stacks)

Конус Glut

glutSolidCone(base, height, slices, stacks)
glutWireCone(base, height, slices, stacks)

Слайд 14

Тор Glut glutSolidTorus(innerRadius, outerRadius, nsides, rings) glutWireTorus(innerRadius, outerRadius, nsides, rings)

Тор Glut

glutSolidTorus(innerRadius, outerRadius, nsides, rings)
glutWireTorus(innerRadius, outerRadius, nsides, rings)

Слайд 15

glutSolidTetrahedron glutWireTetrahedron Тетраэдр Glut

glutSolidTetrahedron
glutWireTetrahedron

Тетраэдр Glut

Слайд 16

glutSolidOctahedron glutWireOctahedron glutSolidDodecahedron glutWireDodecahedron glutSolidIcosahedron glutWireIcosahedron Примитивы библиотеки GLUT

glutSolidOctahedron
glutWireOctahedron
glutSolidDodecahedron
glutWireDodecahedron
glutSolidIcosahedron
glutWireIcosahedron

Примитивы библиотеки GLUT

Слайд 17

glutSolidTeapot(size) glutWireTeapot (size) Чайник Glut

glutSolidTeapot(size)
glutWireTeapot (size)

Чайник Glut

Слайд 18

Примитивы библиотеки GLUT

Примитивы библиотеки GLUT

Слайд 19

алгоритмы, использующие кодирование концов отрезка или всего отрезка (Коэна-Сазерленда); алгоритмы, использующие

алгоритмы, использующие кодирование концов отрезка или всего отрезка (Коэна-Сазерленда);
алгоритмы, использующие параметрическое

представление отсекаемых отрезков и окна отсечения (Лианга-Барского).

Отсечение

Слайд 20

Алгоритм Коэна-Сазерленда

Алгоритм Коэна-Сазерленда

Слайд 21

Алгоритм Коэна-Сазерленда Две конечные точки отрезка получают 4-х разрядные коды, соответствующие

Алгоритм Коэна-Сазерленда

Две конечные точки отрезка получают 4-х разрядные коды, соответствующие

областям, в которые они попали:
1 рр = 1 - точка над верхним краем окна;
2 рр = 1 - точка под нижним краем окна;
3 рр = 1 - точка справа от правого края окна;
4 рр = 1 - точка слева от левого края окна.
Слайд 22

Битовый код 1 4 3 2

Битовый код
1
4
3
2

Слайд 23

А=0000; B=0000; C=0001; D=0000; Битовый код E=0001; F=0010; G=0101; H=0010; I=1000; J=0010; K=1001; L=0001.

А=0000;
B=0000;
C=0001;
D=0000;

Битовый код

E=0001;
F=0010;
G=0101;
H=0010;

I=1000;
J=0010;
K=1001;
L=0001.

Слайд 24

Пусть X - код точки-начала отрезка, Y - код точки-конца отрезка,

Пусть X - код точки-начала отрезка, Y - код точки-конца отрезка,

тогда возможны три случая:
X = Y = 0000. Этот случай означает, что обе точки лежат внутри прямоугольника (т. е. отсечение не требуется).
X and Y ≠ 0. В этом случае точки лежат по одну сторону от какой-либо отсекающей линии (с внешней ее стороны). Следовательно, отрезок полностью лежит вне окна.
Если не выполнены условия 1 или 2, то необходимо находить точки пересечения с некоторыми из отсекающих прямых. Для этого разбивают отрезок найденными точками пересечения и затем применяют тот же анализ кодов концов для полученных новых отрезков.

Алгоритм Коэна-Сазерленда

Слайд 25

X = Y=0: Отрезок AB (0000)and(0000) Алгоритм Коэна-Сазерленда

X = Y=0:
Отрезок AB (0000)and(0000)

Алгоритм Коэна-Сазерленда

Слайд 26

X and Y≠0: Отрезок KL (1001)and(0001) Алгоритм Коэна-Сазерленда

X and Y≠0:
Отрезок KL (1001)and(0001)

Алгоритм Коэна-Сазерленда

Слайд 27

Алгоритм Коэна-Сазерленда

Алгоритм Коэна-Сазерленда

Слайд 28

Задание Используя алгоритм Коэна-Сазерленда, выявить видимые, невидимые и отсекаемые отрезки АВ,

Задание

Используя алгоритм Коэна-Сазерленда, выявить видимые, невидимые и отсекаемые отрезки АВ,

СD, EF, GH, IJ, KL.
Если известны: А(0000), В(0010), С(0001), D(1001), E (0110), F(0010), G(0000), H(0000), I(1000), J(0010), K(1001), L(1010).
Отобразите расположение отрезков относительно окна отсечения.
Слайд 29

Пусть X - код точки-начала отрезка, Y - код точки-конца отрезка,

Пусть X - код точки-начала отрезка, Y - код точки-конца отрезка,

тогда возможны три случая:
X = Y = 0000. Этот случай означает, что обе точки лежат внутри прямоугольника (т. е. отсечение не требуется).
X and Y ≠ 0. В этом случае точки лежат по одну сторону от какой-либо отсекающей линии (с внешней ее стороны). Следовательно, отрезок полностью лежит вне окна.
Если не выполнены условия 1 или 2, то необходимо находить точки пересечения с некоторыми из отсекающих прямых. Для этого разбивают отрезок найденными точками пересечения и затем применяют тот же анализ кодов концов для полученных новых отрезков.

Алгоритм Коэна-Сазерленда

Слайд 30

G = H=0: Отрезок GH Алгоритм Коэна-Сазерленда Случай 1

G = H=0:
Отрезок GH

Алгоритм Коэна-Сазерленда

Случай 1

Слайд 31

X and Y≠0: Отрезок KL Отрезок DC Отрезок EF Алгоритм Коэна-Сазерленда Случай 2

X and Y≠0:
Отрезок KL
Отрезок DC
Отрезок EF

Алгоритм Коэна-Сазерленда

Случай 2

Слайд 32

Отсекаемые отрезки: Отрезок AB; Отрезок IJ. Алгоритм Коэна-Сазерленда Случай 3

Отсекаемые отрезки: Отрезок AB; Отрезок IJ.

Алгоритм Коэна-Сазерленда

Случай 3

Слайд 33

Алгоритм Коэна-Сазерленда

Алгоритм Коэна-Сазерленда

Слайд 34

Алгоритм Коэна-Сазерленда

Алгоритм Коэна-Сазерленда

Слайд 35

Визуальные эффекты OpenGL

Визуальные эффекты OpenGL

Слайд 36

Материалы и освещение Свойства материалов Источники света Модели освещения Туман Прозрачность

Материалы и освещение
Свойства материалов
Источники света
Модели освещения
Туман
Прозрачность
Трафарет – самостоятельно
Текстура – самостоятельно

Визуальные эффекты OpenGL

Слайд 37

Материалы и освещение glEnable(GL_LIGHTING), glEnable(GL_LIGHT0). glBegin(GL_POLYGON); glNormal3f(0.0, 0.0, -1.0); glVertex3f(1.0, 1.0,

Материалы и освещение

glEnable(GL_LIGHTING),
glEnable(GL_LIGHT0).
glBegin(GL_POLYGON);
glNormal3f(0.0, 0.0, -1.0);
glVertex3f(1.0,

1.0, -1.0);
glVertex3f(1.0, -1.0, -1.0);
glVertex3f(-1.0, -1.0, -1.0);
glVertex3f(-1.0, 1.0, -1.0);
glEnd;
Слайд 38

Свойства материала glMaterial[i f](face, pname, param) Какой именно параметр будет определяться

Свойства материала

glMaterial[i f](face, pname, param)
Какой именно параметр будет определяться значением

param, зависит от значения pname:
GL_AMBIENT , значение по умолчанию:
(0.2, 0.2, 0.2, 1.0).
GL_DIFFUSE, значение по умолчанию:
(0.8, 0.8, 0.8, 1.0).
Слайд 39

GL_SPECULAR, значение по умолчанию: (0.0, 0.0, 0.0, 1.0). GL_SHININESS, [0..128]. Значение

GL_SPECULAR, значение по умолчанию: (0.0, 0.0, 0.0, 1.0).
GL_SHININESS, [0..128]. Значение по

умолчанию: 0.
GL_EMISSION, значение по умолчанию: (0.0, 0.0, 0.0, 1.0).

Свойства материала

Слайд 40

{Свойство материала} glMaterialfv(GL_FRONT, GL_AMBIENT, @MaterialColor); {Прорисовка одной грани куба} glBegin(GL_POLYGON); glNormal3f(0.0,

{Свойство материала}
glMaterialfv(GL_FRONT,
GL_AMBIENT,
@MaterialColor);
{Прорисовка одной грани куба}
glBegin(GL_POLYGON);
glNormal3f(0.0, 0.0, -1.0);
glVertex3f(1.0, 1.0,

-1.0);
glVertex3f(1.0, -1.0, -1.0);
glVertex3f(-1.0, -1.0, -1.0);
glVertex3f(-1.0, 1.0, -1.0);
glEnd;

Свойства материала

Слайд 41

Материалы и освещение

Материалы и освещение

Слайд 42

Материалы и освещение

Материалы и освещение

Слайд 43

Материалы и освещение

Материалы и освещение

Слайд 44

Материалы и освещение

Материалы и освещение

Слайд 45

Материалы и освещение

Материалы и освещение

Слайд 46

Материалы и освещение

Материалы и освещение

Слайд 47

Материалы и освещение

Материалы и освещение

Слайд 48

Визуальные эффекты. Туман Туман является самым простым в использовании спецэффектом, предназначенным

Визуальные эффекты. Туман

Туман является самым простым в использовании спецэффектом, предназначенным для

передачи глубины пространства. Он позволяет имитировать атмосферные эффекты дымки и тумана. При его использовании объекты сцены перестают быть яркими и становятся более реалистичными, естественными для восприятия.
Туман имеет несколько характеристик:
Цвет (GL_FOG_COLOR);
Плотность (GL_FOG_DENSITY);
Закон распространения (GL_FOG_MODE).
Слайд 49

Упаравление наложением тумана Для того, чтобы включить туман используют команду с

Упаравление наложением тумана

Для того, чтобы включить туман используют команду с параметром

glEnable(GL_FOG),
для выключения glDisable(GL_FOG);
Для вычисления интенсивности тумана используют команду glFog[f i][v](pname,param[s]);
pname:
GL_FOG_MODE – задает закон распространения тумана:
GL_LINEAR – говорит о том, что плотность тумана распространяется по линейному закону, т.е. чем дальше туман, тем он плотнее;
f=e-z/e-s
GL_EXP - oбычный туман, заполняющий весь экран. f=exp(-d*z)
GL_EXP2 - это следующий шаг после GL_EXP. Затуманит весь экран, за то придает больше глубины всей сцене. f=exp(-(d*z)2)
Слайд 50

GL_FOG_DENSITY – плотность тумана (по умолчанию принимает значение равное единице); GL_FOG_START

   GL_FOG_DENSITY – плотность тумана (по умолчанию принимает значение равное единице);
    

GL_FOG_START – задает начальную границу тумана по координате z(по умолчанию принимает значение равное нулю);
    GL_FOG_END – задает конечную границу тумана по координате z(по умолчанию принимает значение равное единице);
GL_FOG_INDEX - Индекс цвета тумана, только если вы используете палитру.
   GL_FOG_COLOR – массив RGBA задает цвет тумана.

Упаравление наложением тумана

Слайд 51

Слайд 52

GL_LINEAR

GL_LINEAR

Слайд 53

GL_EXP

GL_EXP

Слайд 54

GL_EXP2

GL_EXP2

Слайд 55

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

Пример на использование тумана

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

Слайд 56

Наложение тумана

Наложение тумана

Слайд 57

Наложение тумана

Наложение тумана

Слайд 58

Наложение тумана

Наложение тумана

Слайд 59

Режимы обработки прозрачности

Режимы обработки прозрачности

Слайд 60

Трассировка лучей

Трассировка лучей

Слайд 61

Вторичные лучи разделяются на следующие: лучи тени/освещения; лучи отражения; лучи преломления. Трассировка лучей

Вторичные лучи разделяются на следующие:
лучи тени/освещения;
лучи отражения;
лучи преломления.


Трассировка лучей

Слайд 62