Содержание
- 2. Полигональные сетки (Polygonal meshes) Полигональные сетки – набор полигонов (граней), которые в совокупности формируют оболочку объекта
- 3. Достоинства полигональных сеток Основаны на простоте использования полигонов: Легко представлять и преобразовывать Обладают простыми свойствами Единственный
- 4. Пример:
- 5. Монолитные объекты и тонкие оболочки Полигональные сетки позволяют задавать объекты двух типов: Монолитные (solid) объекты полигональные
- 6. Примеры:
- 7. Вершины полигона Каждый полигон определяется путем перечисления его вершин Вершина задается при помощи перечисления ее координат
- 8. Пример представления вершины полигона struct Vertex { GLfloat x; GLfloat y; GLfloat z; };
- 9. Нормаль к полигону Вектор нормали задает направление перпендикуляра грани При рисовании объекта эта информация используется для
- 10. Пример представления нормали полигона struct Normal { GLfloat x; GLfloat y; GLfloat z; };
- 11. Нормали в вершинах и нормали в поверхностях Использование нормалей к грани плохо подходит для визуализации гладких
- 12. В OpenGL нормаль является атрибутом вершины С т.з. быстродействия выгоднее хранить отдельную копию вектора нормали для
- 13. Пример структур данных для хранения сеток struct Vector3d { GLfloat x, y, z; }; struct Mesh
- 14. Возможные вариации Если полигональная сетка задается при помощи однотипных примитивов, например, треугольников, то можно представить грани
- 15. Пример struct Vector3d { GLfloat x, y, z; }; struct Mesh { GLuint numVertices; Vertex *pVertices;
- 16. Лицевые и нелицевые стороны граней Каждая плоская грань (полигон) имеет две стороны: лицевую (видна извне объекта)
- 17. Определение видимой стороны грани Для определения стороны грани, повернутой к наблюдателю, OpenGL использует направление обхода вершин
- 18. Обход сторон куба против часовой стрелки
- 19. Команда glFrontFace Задает направление обхода вершин грани, соответствующее ее лицевой стороне (Front face): void glFrontFace(GLenum mode)
- 20. Режим отбраковки граней (Face culling) После того, как направление обхода вершин грани установлено, OpenGL может произвести
- 21. Управление режимом отбраковки граней glEnable(GL_CULL_FACE) glDisable(GL_CULL_FACE) void glCullFace(GLenum mode) где mode: GL_FRONT GL_BACK GL_FRONT_AND_BACK
- 22. Нахождение нормальных векторов (нормалей) Координаты нормалей для каждой вершины можно задавать: вручную (в процессе моделирования) вычислять
- 23. Задание нормалей вручную Позволяет задать нормали к поверхности способом, лучшим с точки зрения дизайнера Основной недостаток
- 24. Редактирование нормалей в программе 3D Studio Max
- 25. Аналитический метод нахождения нормалей Для функционально заданных поверхностей вектор нормали по направлению совпадает с вектором градиента
- 26. Вычисление нормалей для плоских граней полигональной сетки Для плоских граней сетки достаточно вычислить перпендикуляр к каждой
- 27. Метод Ньюэла для нахождения нормали к плоской грани Разработан Мартином Ньюэллом Решает указанные проблемы простого способа
- 28. Нахождение нормали к вершинам сетки, описывающим криволинейную поверхность Грани сетки, описывающей криволинейную поверхность, могут иметь общие
- 29. Свойства сеток Монолитность Совокупность грани сетки заключает в себе некоторое пространство Связность Между любыми двумя вершинами
- 30. Моделирование поверхностей вращения Поверхность вращения образуется посредством вращательной развертки с заметанием профильной кривой C вокруг некоторой
- 31. Создание поверхности вращения
- 32. Поверхности на базе функций двух переменных Некоторые поверхности однозначны в одном измерении, поэтому могут быть явно
- 33. Пример поверхности заданной, функцией sinc с круговой симметрией
- 34. Визуализация трехмерных сцен
- 35. Задачи Для визуализации трехмерной сцены при помощи OpenGL необходимо решить ряд задач: Очистка буфера кадра Настройка
- 36. Очистка буфера кадра Очистка буфера кадра осуществляет заполнение одного или нескольких буферов, входящих в состав буфера
- 37. Команда glClear Выполняет очистку одного или нескольких указанных буферов: void glClear(GLbitfield mask) где mask – комбинация
- 38. Команда glClearColor Задает значение цвета, используемого при очистке буфера цветов void glClearColor( GLclampf red, GLclampf green,
- 39. Команда glClearDepth Задает значение глубины, используемое для очистки буфера глубины void glClearDepth(GLclampd depth) По умолчанию это
- 40. Команда glClearStencil Устанавливает целочисленное значение, используемое для очистки буфера трафарета void glClearStencil(GLint stencil) Допустимые значения –
- 41. Установка порта просмотра и матрицы проецирования Порт просмотра задает область окна, в которую будет осуществляться вывод
- 42. Команда glViewPort Устанавливает положение и размеры порта просмотра, осуществляя аффинное преобразование вершин из нормализованных координат устройства
- 43. Установка матрицы перспективного преобразования OpenGL позволяет построить матрицу перспективного преобразования несколькими способами: По координатам плоскостей, задающих
- 44. Команда glFrustum Задает перспективное преобразование отображаемого объема по заданным координатам ограничивающих этот объем плоскостей void glFrustum(
- 45. Геометрический смысл параметров glFrustum znear zfar bottom top right left
- 46. Точность хранения значений в буфере глубины Точность хранения значений в буфере глубины определяется не только разрядностью
- 47. Команда gluPerspective Задает матрицу перспективного проецирования по заданному углу обзора вдоль оси Y, соотношению ширины и
- 48. Установка и ориентирование камеры Библиотека утилит OpenGL (GLU) позволяет задать положение наблюдателя, зная координаты его глаза,
- 49. Пример установки камеры // текущая матрица – матрица моделирования-вида glMatrixMode(GL_MODELVEIW); // сбрасываем ранее заданные преобразования glLoadIdentity();
- 50. Размещение объектов на сцене Ориентацию и положение объектов на сцене можно задать при помощи аффинных преобразований
- 51. Пример // устанавливаем матрицу камеры // .. // перенос объекта glTranslated(3, 3, 2); // вращение на
- 52. Комбинация матричных преобразований Каждая вершина примитива умножается на некоторую матрицу T равную: T = P x
- 53. Визуализация объектов Визуализация объектов заключатся в рисовании примитивов, составляющих этот объект Выполнение серий командных скобок glBegin()/glEnd()
- 54. Пример: void DrawSomeObject() { glBegin(GL_TRIANGLES); glNormald(1, 0, 0); glColor3f(0.1f, 1, 1); glVertex3f(3, 2, 3); //... glEnd();
- 55. Сокрытие невидимых линий и поверхностей Объекты, расположенные ближе к наблюдателю, могут полностью или частично перекрывать объекты,
- 57. Скачать презентацию