1 Viz3D Визуализация в 3D URL: http://www.school30.spb.ru/cgsg/cgc/ E-mail: [email protected] Галинский В.А. Физико-математический лицей № 30 Computer Graphics Support Group 2 Представление объектов Viz3D V={V0, V1, V2, V3}={(x0,y0,z0), (x1,y1,z1),…} V1 V0 P0 E3 V3 P1 E2 E4 V2 E*={#V*1, #V*2, #P*1, #P*2} E1 E0 E0={0,1,0,-1} E1={1,3,1,-1} E2={3,2,1,-1} E3={1,2,0,1} E4={2,0,0,-1} P*={#V*1, #V*2, #V*3 , #E*1 , #E*2 , #E*3} P0={0,1,2,0,3,4} P1={1,3,2,1,2,3} Галинский В.А. Физико-математический лицей № 30 Computer Graphics Support Group 3 Представление объектов V2 V0 V1 V0 V4 V3 Viz3D V3 V1 V5 V2 quad triangle strip (0,1,2),(2,1,3),(2,3,4),(4,3,5) V0 V0 V2 V4 V5 V4 V3 V1 V2 triangle fan (0,1,2),(0,2,3),(0,3,4),(0,4,5) V1 V3 V5 quad strip Галинский В.А. Физико-математический лицей № 30 Computer Graphics Support Group 4 Иерархическое моделирование Viz3D Работа в «контексте»: openStructure(Id1); setLocalTranformation(rotateX(...)); addPolygon(...); setLocalTranformation(rotateX(...)); openStructure(Id2); setLocalTranformation(rotateX(...)); addPolygon(...); ... closeStructure(); openStructure(Id2); setLocalTranformation(rotateX(...)); addPolygon(...); ... closeStructure(); ... closeStructure(); Галинский В.А. Физико-математический лицей № 30 Computer Graphics Support Group 5 Иерархическое моделирование Viz3D функции: openStructure(Id); closeStructure(); setPolygonAttribute(...); addPolygon(...); setLocalTranformation(matrix_4x4); matrix_4x4 rotateX(angle); matrix_4x4 rotateY(angle); matrix_4x4 rotateZ(angle); matrix_4x4 scale(sx, sy, sz); matrix_4x4 translate(dx, dy, dz); postRoot(); Галинский В.А. Физико-математический лицей № 30 Computer Graphics Support Group 6 Визуализация линиями Viz3D • Визуальный реализм – перспектива: Галинский В.А. Физико-математический лицей № 30 Computer Graphics Support Group 7 Визуализация линиями Viz3D • Визуальный реализм – depth cueing (изображение глубины): – удаление невидимых линий Галинский В.А. Физико-математический лицей № 30 Computer Graphics Support Group 8 Визуализация закрашенных фигур Viz3D • Визуальный реализм – удаление невидимых поверхностей – цвет Галинский В.А. Физико-математический лицей № 30 Computer Graphics Support Group 9 Визуализация закрашенных фигур Viz3D • Визуальный реализм – освещение Галинский В.А. Физико-математический лицей № 30 Computer Graphics Support Group 10 Визуализация закрашенных фигур Viz3D • Визуальный реализм – закраска и интерполяция Галинский В.А. Физико-математический лицей № 30 Computer Graphics Support Group 11 Визуализация закрашенных фигур Viz3D • Визуальный реализм – текстурирование Галинский В.А. Физико-математический лицей № 30 Computer Graphics Support Group 12 Текстурирование Viz3D Галинский В.А. Физико-математический лицей № 30 Computer Graphics Support Group 13 Визуализация закрашенных фигур Viz3D • Визуальный реализм – тени Галинский В.А. Физико-математический лицей № 30 Computer Graphics Support Group 14 Закраска (shading) • • • • Viz3D каркасная визуализация (wireframe) плоская закраска (flat shading) интерполяция цвета – закраска Гуро (Gouraud shading) интерполяция нормали – закраска Фонга (Phong shading) Галинский В.А. Физико-математический лицей № 30 Computer Graphics Support Group 15 Pixar Shutterbug Viz3D 3 Orthographic views Parallel projection Perspective View (no hidden lines) Depth cuing (hidden lines) http://www.siggraph.org/education/materials/HyperGraph/shutbug.htm Галинский В.А. Физико-математический лицей № 30 Computer Graphics Support Group 16 Pixar Shutterbug Viz3D Colored Visible line determination (with facets) Visible surface determination (constant shading) Shaded by facets http://www.siggraph.org/education/materials/HyperGraph/shutbug.htm Галинский В.А. Физико-математический лицей № 30 Computer Graphics Support Group 17 Pixar Shutterbug Viz3D Gouraud shaded (diffuse) Gouraud shaded (specular) Phong shaded (polygon based) Phong shaded (curved surfaces based) http://www.siggraph.org/education/materials/HyperGraph/shutbug.htm Галинский В.А. Физико-математический лицей № 30 Computer Graphics Support Group 18 Pixar Shutterbug Viz3D Multiple lights Texture mapping Bump mapping and shadow Reflection mapping http://www.siggraph.org/education/materials/HyperGraph/shutbug.htm Галинский В.А. Физико-математический лицей № 30 Computer Graphics Support Group 19 Алгоритм плавающего горизонта Viz3D глобальные массивы: Up[W] и Down[W] Функция точки(x,y): if (y > Up[x]) { SetPixel(x,y); Up[x] = y; } if (y < Down[x]) { SetPixel(x,y); Down[x] = y; } Галинский В.А. Физико-математический лицей № 30 Computer Graphics Support Group 20 Backface culling Viz3D • отсечение «задних» поверхностей • определение передних и задних многоугольников по обходу (по и против часовой стрелке – CW, CCW) без отсечения с отсечением Галинский В.А. Физико-математический лицей № 30 Computer Graphics Support Group 21 Алгоритм Робертса 1. 2. 3. Viz3D Все тела выпуклы (или приводим к такому виду) Удаление самоперекрывающихся ребер и граней Каждое из видимых ребер каждого тела сравнивается с каждым из оставшихся тел для определения перекрытия Галинский В.А. Физико-математический лицей № 30 Computer Graphics Support Group 22 Z-Буфер Viz3D для каждого мн-ка для каждой точки мн-ка pz = значение z в (x,y) если pz <= ZBuf[y][x] тогда SetPixel(x,y) ZBuf[y][x] = pz Галинский В.А. Физико-математический лицей № 30 Computer Graphics Support Group 23 Алгоритм художника (list priority) Viz3D Сортировка многоугольников по оси Z (по глубине) – ближней или дальней точке Разрешение всех неоднозначностей при перекрытиях по глубине, «разрезание» при необходимости многоугольников Построение всех многоугольников от дальнего по глубине к ближнему. текущий (дальний) мн-к P: по каждому мн-ку Q, с которым P пересекается по z: Оболочки P и Q не пересекаются по x? Оболочки P и Q не пересекаются по y? P целиком лежит по другую сторону от Q по отношению к наблюдателю? Q целиком лежит по одну сторону от P по отношению к наблюдателю? Проекции P и Q на плоскость (x,y) не пересекаются? Галинский В.А. Физико-математический лицей № 30 Computer Graphics Support Group Алгоритмы с разбиением на подпространства P2 A 1 D P1 3 B 2 C Галинский В.А. Физико-математический лицей № 30 Computer Graphics Support Group 24 Viz3D 25 Алгоритм построчного сканирования z Viz3D z x z x z x x Галинский В.А. Физико-математический лицей № 30 Computer Graphics Support Group 26 Трассировка лучей Viz3D Галинский В.А. Физико-математический лицей № 30 Computer Graphics Support Group 27 Viz3D • Практические задания (до 20.11.2011) – Реализовать две программы построения простой 3D сцены в реальном времени (с использованием собственных функций построения в буфер кадра): • «проволочная» анимация - на выбор: – или график функции y=f(x,z) с использованием алгоритма плавающего горизонта – или 2-3 выпуклых тела визуализируются с использованием алгоритма Робертса • визуализация сплошных тел – 2-3 выпуклых тела визуализируются с использованием алгоритма z-буфера с закраской Гуро, освещение вычисляется как косинус угла между нормалью к поверхности (к точке) и направлением на источник света. Галинский В.А. Физико-математический лицей № 30 Computer Graphics Support Group