Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Геометричні перетворення в тривимірному просторіСодержание книги
Похожие статьи вашей тематики
Поиск на нашем сайте
Лінійні геометричні перетворення у тривимірному просторі виконуються з допомогою множення матриці відповідного перетворення на вектори всіх вершин та нормалей полігональної моделі. При цьому використовуються афінні однорідні координати V(x1, x2, x3, x4), які пов’язані зі звичайними декартовими співвідношеннями: x = x1 / x4, y = x2 / x4, z = x3 / x4, x4 –довільне, в нормалізованій формі x4=1. Афінні однорідні координати записують також у вигляді V(x / w, y / w, z / w, w) або V(x, y, z, 1). Матриці геометричних перетворень в афінній геометрії мають розміри 4х4. З курсу аналітичної геометрії відомо, що будь-яке лінійне геометричне перетворення можна представити, як транспозицію (послідовність) елементарних (базисних) перетворень. Повний набір базисних перетворень можна побудувати різними способами. В комп’ютерній графіці для тривимірного випадку прийнятий такий набір елементарних перетворень: · поворот на кут α навколо ОХ в площині YOZ; · поворот на кут β навколо ОY в площині XOZ; · поворот на кут γ навколо ОZ в площині XOY; · масштабування (розтягування або стискання) з коефіцієнтами r,s,t по осях; · перенесення на вектор (a, b, c); · відзеркалення відносно координатної площини XOY; · відзеркалення відносно координатної площини YOZ; · відзеркалення відносно координатної площини XOZ. В OpenGL під час виконання програми використовується три матриці: модельна (для геометричних перетворень вершин і нормалей), видоваматриця (для проектування у вікно виведення) та матриця текстур. Для роботи з відповідною матрицею її потрібно активізувати командою glMatrixMode (mode) з параметром mode рівним GL_MODELVIEW, GL_PROJECTION або GL_TEXTURE. Для завантаження елементів активної матриці використовується команда glLoadMatrix[f d](@ m), де @m вказує на масив з 16 елементів типу GLfloat або GLdouble відповідно до суфікса команди. В масиві записується матриця по стовпцях. Команда glLoadIdentity записує в активну матрицю одиничну. Для запам’ятовування поточної активної матриці використовується стек матриць. Для збереження поточного стану (запис в стек) використовується команда glPushMatrix, для відновлення збереженого glPopMatrix. Для видової матриці глибина стека дорівнює як мінімум 32, а для двох інших – як мінімум 2. Для множення поточної матриці зліва на іншу використовується команда glMultMatrix[f d](@ m). Зручніше для зміни активної матриці використовувати не команду множення, а спеціальні команди, які за значеннями своїх параметрів створюють потрібну матрицю і множать її з поточною. Таких команд три і вони утворюють повний набір лінійних перетворень. · Перенесення на вектор(x,y,z): glTranslate [f d] (x, y, z) · Поворот на кут angle навколо осі, яка проходить через початок координат і точку з координатами (x,y,z): glRotate[f d] (angle, x, y, z) · Масштабування (розтягування чи стискання) з коефіцієнтами x, y, z по осях: glScale[f d] (x, y, z) Лінійні геометричні перетворення використовуються для побудови конструкцій із найпростіших фігур (геометричних примітивів) з допомогою масштабування, повороту та перенесення, для анімації - переміщення об’єктів в просторі, зміна розмірів, зміна положення системи координат, зміна точки зору (камери). Будь-яка складна лінійна трансформація розпадається на послідовність кроків, в якості яких найзручніше вибирати базисні афінні перетворення. Розглянемо базисні афінні перетворення в правосторонній системі координат та їх відповідники в OpenGL. Додатній напрям поворотів відповідає напряму проти годинникової стрілки, якщо дивитись на площину обертання з додатнього напряму відповідної осі. · поворот на кут α навколо ОХ в площині YOZ glRotate(α*Pi/180, 1, 0, 0), α в радіанах · поворот на кут β навколо ОY в площині XOZ glRotate(β*Pi/180, 0, 1, 0), β в радіанах · поворот на кут γ навколо ОZ в площині XOY glRotate(γ *Pi/180, 0, 0, 1), γ в радіанах · деформація (розтяг чи стискання) з коефіцієнтами r,s,t по осях GlScale(r, s, t) · перенесення на вектор (a, b, c) GlTranslate(a, b, c) · віддзеркалення відносно координатної площини XOY GlScale(1, 1, -1) · віддзеркалення відносно координатної площини XOZ GlScale(1, -1, 1), · віддзеркалення відносно координатної площини YOZ GlScale(-1, 1, 1), Крім афінних часто використовуються такі перетворення: · віддзеркалення відносно початку координат O GlScale(-1, -1, -1), · поворот на кут α навколо вектора (x, y, z), що проходить через точку з координатами (a,b,c) здійснюється за три кроки: 1) перенесення центру координат на вектор (a, b,c) GlTranslate(a, b, c). 2) поворот на кут α навколо вектора (x, y, z) glRotate(α*Pi/180, x, y, z); 3) повернення центру координат до початкового положення glTranslate(-a, -b, -c); Матриця перетворення дорівнює добутку матриць відповідних перетворень. Зауваження. Перетворення віддзеркалення змінюють напрям обходу вершин граней на протилежний, тобто лицьові грані стають нелицьовими і навпаки. Напрям обходу вершин лицьових сторін вказується командою glFrontFace (mode) зі значенням параметра mode рівним GL_CW (за годинниковою стрілкою) або GL_CCW (проти годинникової стрілки). Значення за замовчуванням GL_CCW. Для симетричних фігур замість віддзеркалення краще використовувати поворот на 180°. Приклад 7.1. Побудова комбінованого многогранника (рис.7.1) з допомогою трансформації кубів. В даному розділі використовуються приклади трансформації найпростішої фігури – куба з ребром а = 2, який будується в центрі координат з різнокольоровими гранями процедурою з попередньої роботи DrawSolidCube. Для побудови куба з однаково зафарбованими гранями викорисовується процедура glutSolidCube(size) з бібліотеки DGLUT.PAS. Перший спосіб. Шість кубів. procedure Draw3D; Begin glPushMatrix; // поточна модельна матриця =>в стек
|
||||
Последнее изменение этой страницы: 2016-04-08; просмотров: 844; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.119.163.95 (0.006 с.) |