Слайд 2
3D Graphics
Трехмерная графика (3D Graphics) – визуальное отображение
трехмерной сцены или объекта. Для представления трехмерной графики на
двумерном устройстве (дисплее) применяют рендеринг.
Слайд 3
rendering
Рендеринг (rendering) – процесс создания реалистичных изображений на
экране, использующий математические модели и формулы для добавления цвета,
тени и т. д.
Слайд 5
Из 3D в 2D
Для отображения трехмерной модели на
двухмерном экране монитора требуется произвести специальные математические преобразования трехмерных
координат всех точек в двухмерные.
Слайд 7
Аффинные преобразования
При смене позиции наблюдателя требуется произвести преобразования
координат, связанные с поворотом объекта, его масштабированием и учетом
перспективы.
Такие преобразования называются аффинными преобразованиями
Слайд 8
Пример преобразования
Аффинные преобразования применяются при повороте и трансформации
объекта (масштабирование, скос).
Допустим, что при повороте ординаты точек (у-координаты)
не меняются. Значит, поворот происходит относительно оси y.
Слайд 9
Освещение
Модель начинает выглядеть трехмерной только после моделирования освещения,
а это напрямую связано с положением плоскостей (полигонов) модели,
точнее, с направлением перпендикуляров к плоскостям – нормалей.
Степень освещенности точки зависит от угла падения лучей света. Чем меньше угол между нормалью и лучом света, тем больше освещенность точки поверхности.
Слайд 10
Нормали
Если взять ровную поверхность, то нормали в каждой
ее точке будут одинаковыми и освещенность также будет одинаковой.
А
если поверхность неровная, то нормали в каждой точке будут разными - и освещенность тоже.
Слайд 11
Модель освещенности Фонга
Вклад в это значение от каждого
источника света зависит от расстояния между источником света и
точкой на поверхности.
Слайд 14
Дальнейшее развитие
В дальнейшем, исследователи придумывали иные способы вычисления
этой составляющей, более сложные (Blinn, Cook-Torrance, Ward), учитывающие распределение
энергии света, его поглощение материалами и рассеивания в виде диффузной составляющей.
Слайд 15
Игра света и тени
С целью расчета теней и
полутеней (диффузных теней) применяются различные алгоритмы – Ray tracing
(трассировка лучей), Radiosity (излучение).
На рисунке представлены результаты просчета теней и диффузной засветки при помощи Radiosity.
Слайд 16
Первые уроки
3D программирование
Слайд 17
Окно в 3d мир.
Структура программы
Камера
Свет
Объекты
Действия с объектами
окончание
голова
тело
ноги
Слайд 18
голова
Graphics3D 640,480,16,1
Устанавливает 3D Графический способ.
Синтакс такой: Graphics3D
ширина, высота, глубина цвета, режим
Ширина, высота – размер создаваемого
экрана
Глубина – глубина цвета – 16, 24 или 32 бита на пиксель.
Режим:
0 – оконный во время разработки (если возможно), полноэкранный в .exe формате;
1 –полноэкранный
2 –оконный
3 –оконный, с возможностью изменения размеров окна.
Слайд 19
голова
SetBuffer BackBuffer() – установить поток, буфер.
cam=CreateCamera() –
это самая основная команда в 3D программах. Если не
будет даже одной камеры то 3D программа работать не будет, камера-это тоже самое, что и наши глаза, через неё мы видим окружающий 3D мир.
Lit=CreateLight() – Это команда создает источник света. Можно изменять тип света, в скобки вписываем следующие значения:
1:направленный
2:точка
3: пятно
Слайд 20
тело
cub=CreateCube() – Это мы создаем 3D объект куб.
Геометрические
объекты:
CreateSphere () - сфера
CreateCylinder () - цилиндр
CreateCone() – конус
PositionEntity cub,0,0,5 –
Эта команда помещает объект в позиции и в 3D месте.
ScaleEntity cub,1,0.3,1 – Изменяет размер объекта
RotateEntity cub,0,40,0 – Вращает объект так, чтобы это было при абсолютной ориентации.
Слайд 21
тело
TurnEntity cub,0.6,0.2,0.3 – вращение
TurnEntity entity,pitch#,
yaw#, roll#, [,global]
Tpitch# - X угол и эквивалентна наклону
вперед / назад.
Yaw# - Y угол и эквивалентен вращению налево / вправо.
Roll# - Z угол и эквивалентен наклону налево / вправо.
UpdateWorld ()– UpdateWorld [anim_speed#]
anim_speed# (необязательный) – скорость для мультипликации.
Установлен по умолчанию в 1.
Слайд 22
тело
Repeat
…………………………….
Until KeyHit(1) – Между этими двумя командами будет
происходить основной цикл игры. При нажатии кнопки ESC начинает
читать следующую команду.
Слайд 23
ноги
End – Завешает программу
________________________________________
Создаём шаблон
Слайд 24
Интерфейс программы.
Так выглядит окно Blitz3d:
Синее текстовое поле является
основным – в нём пишут программный код.
Слайд 26
Запуск и отладка программы:
Для запуска программы нажмите F5
или
Для запуска предыдущей программы нажмите F6
Для проверки ошибок нажмите
F7
Для создания .exe файла нажмите: меню Program -> Create Executable
Для включения\отключения отладочного окна: меню Program -> Debug Enabled
В правой части окна находится панель с тремя вкладками:
Funcs – отображает все функции, которые используются в проекте.
Types – отображает все типы, которые используются в проекте.
Label – отображает все метки.
Слайд 27
Graphics3D 640,480,16,2
SetBuffer BackBuffer()
cam=CreateCamera()
lit=CreateLight()
……………………………………….
Repeat
…………………………………………
UpdateWorld
RenderWorld
Flip
Until KeyHit(1)
End
Слайд 28
Graphics3D 800,600,32,2
SetBuffer BackBuffer()
camera=CreateCamera()
PositionEntity camera,0,2,-9
light=CreateLight()
cub=CreateCube()
RotateEntity light,45,90,45
While Not KeyHit(1)=1
RenderWorld()
Flip()
Wend
End
камера
Позиция камеры
свет
Ставим куб
Поворот куба
Пока не нажата ESC
Нарисуем
КУБ
Слайд 30
Graphics3D 800,600,32,2
SetBuffer BackBuffer()
camera=CreateCamera()
PositionEntity camera,0,2,-9
light=CreateLight()
cub=CreateCube()
sph=CreateSphere(32)
ScaleEntity
sph,1,1,1
ScaleEntity cub,1,1,1
EntityAlpha cub,0.5
RotateEntity cub,45,45,45
RotateEntity light, 90,45,45
While Not KeyHit(1)=1
RenderWorld()
Flip()
Wend
End
Размер объекта
Прозрачность объекта
Слайд 31
ДОМА:
Поставить цилиндр на куб.
Используем:
CreateCylinder () - цилиндр
CreateCube() - куб
PositionEntity
cub,0,0,5 – Эта команда помещает объект в
позиции и в 3D месте.
ScaleEntity cub,1,0.3,1 – Изменяет размер объекта
Слайд 32
Поставим объект
Graphics3D 640,480,16,1
SetBuffer BackBuffer()
cam=CreateCamera()
lit=CreateLight()
cub=CreateCube()
PositionEntity cub,0,0,5
ScaleEntity cub,1,0.3,1
RotateEntity cub,0,40,0
Repeat
TurnEntity cub,.6,.2,.3
TurnEntity
lit,5,5,0
UpdateWorld
RenderWorld
Flip
Until KeyHit(1)
End
Слайд 33
Практическая работа.
Изменить параметры света.
Изменить размер объекта.
Переместить объект вверх
Переместить
объект вправо.
Изменить скорость вращения.
Дома: 1. Установить программу
2. Создать сферу и цилиндр.