![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 851; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.174.5 (0.011 с.) |