Проецирование трехмерных объектов
Классификация проекций
Определение
Основные элементы проекции:
Центральная проекция
Параллельная проекция
Одноточечная проекция
Основные виды проекций
Вывод формул центральной перспективной проекции
Системы координат
Определим координаты A’
Буфер кадра (Frame buffer)
Проверка глубины - это эффективная технология удаления скрытых поверхностей
Преобразования точек в разных системах координат
Масштабирование
изменить положение точки наблюдения
Проекционные преобразования
Параллельное проецирование в OpenGL
Перспективные преобразования в OpenGL
Область вывода
241.10K

Проецирование трехмерных объектов

1. Проецирование трехмерных объектов

Лекция №6
«компьютерная графика

2. Классификация проекций

КЛАССИФИКАЦИЯ ПРОЕКЦИЙ

3. Определение

• В общем случае проекции преобразуют
точки, заданные в системе координат
размерностью n в точки системы
координат размерностью меньшей, чем n
• точки трехмерного пространства преобразуются
в точки двумерного пространства

4. Основные элементы проекции:

• Центр проекции
• Проецирующие лучи (проекторы)прямые
• Проекционная (картинная) плоскость

5.

Плоские геометрические
проекции
центральные
параллельные

6. Центральная проекция

центр проекции находится на конечном
расстоянии от проекционной плоскости

7. Параллельная проекция

центр проекции удален на бесконечность

8. Одноточечная проекция

• Точка схода называется главной, если совокупность
прямых параллельна одной из координатных осей

9. Основные виды проекций

Плоские геометрические
проекции
Параллельные
Ортографически
е
Аксонометрические
Центральные
Косоугольные
Изометрические

10. Вывод формул центральной перспективной проекции

Расположение осей координат на экране

11. Системы координат

12.

• Плоскость экрана совпадает с проекционной
• k – расстояние от наблюдателя до проекционной плоскости
• А проецируется на экран как А’

13. Определим координаты A’

Из подобия треугольников Ay Az N и yэ ON

y
ky
, yэ
z k k
z k
kx

N 0,0, k
z k

14.

• точку наблюдения поместить в начало координат,
• проекционную плоскость на расстояние
а

15.

kx

z
ky

z

16. Буфер кадра (Frame buffer)

• буфер глубины или Z-буфер
(Depth buffer),
• буфер цвета (Color buffer),
• накопительный буфер
(Accumulation buffer)
• буфер шаблона (Stencil buffer).

17. Проверка глубины - это эффективная технология удаления скрытых поверхностей

Проверка глубины - это эффективная
технология удаления скрытых поверхностей
• активизировать проверку глубины
glEnable(GL_DEPTH_TEST);
• В программе
glClear(GL_COLOR_BUFFER_BIT |
GL_DEPTH_BUFFER_BIT);
• Отключить
glDisable(GL_DEPTH_TEST);

18. Преобразования точек в разных системах координат

ПРЕОБРАЗОВАНИЯ ТОЧЕК В РАЗНЫХ
СИСТЕМАХ КООРДИНАТ

19.

20.

21. Масштабирование

• glScale (arg1, arg2, arg3)
аргументы - коэффициенты масштабирования
по каждой из осей

22. изменить положение точки наблюдения

• void gluLookAt (GLdouble eyex, GLdouble
eyey, GLdouble eyez,
GLdouble centerx, GLdouble centery,
GLdouble centerz,
GLdouble upx, GLdouble upy, GLdouble upz)

23. Проекционные преобразования

• определяем отсекающий объем видимости
–Как сцена будет отображаться на
экране монитора
–Какие объекты или части объектов
войдут в окончательное
изображение

24. Параллельное проецирование в OpenGL

25.

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

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

27.

• void glFrustum(GLdouble left, GLdouble
right, GLdouble bottom, GLdouble top,
GLdouble near, GLdouble far);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(xmin, xmax, ymin, ymax, near, far);

28.

29.

• void gluPerspective(GLdouble angley,
GLdouble aspect, GLdouble znear, GLdouble
zfar)

30. Область вывода

glViewPort(GLint x, GLint y, GLint
• void
width, GLint height)
ox=x+width/2, oy=y+height/2
• Пусть px=width, py=height,
(xw, yw, zw)T = ( (px/2) xn+ ox ,
(py/2) yn+ oy ,
[(f-n)/2] zn+(n+f)/2 )T

31.

• n и f задают минимальную и максимальную
глубину точки в окне
• void glDepthRange(GLclampd n, GLclampd f)
English     Русский Правила