Головна

Модельна Видові перетворення

  1. Z і D-перетворення функцій часу
  2. Алгоритм - зрозуміла і точна послідовність дій, що описує процес перетворення об'єкта з початкового стану в кінцеве.
  3. Візьмемо довільну основну функцію. Тоді на підставі визначень узагальненої похідної, перетворення Фур'є на і властивостей перетворення Фур'є маємо
  4. Питання 18. Перетворення Петра I.
  5. Питання № 8 Логічні закони і правила перетворення логічних виразів
  6. Висновки з категоричних суджень за допомогою їх перетворення
  7. Обчислення зворотної матриці елементарними перетвореннями.

До модельно-видовою перетворенням будемо відносити перенос, поворот і зміна масштабу уздовж координатних осей. Для проведення цих операцій досить помножити на відповідну матрицю кожну вершину об'єкта і отримати змінені координати цієї вершини:

(X ', y', z ', 1) T = M * (x, y, z, 1) T

де M - матриця модельно-видового перетворення. Перспективне перетворення і проектування проводиться аналогічно. Сама матриця може бути створена за допомогою наступних команд:

void glTranslate [f d] (GLtype x, GLtype y, GLtype z)

void glRotate [f d] (GLtype angle, GLtype x, GLtype y, GLtype z)

void glScale [f d] (GLtype x, GLtype y, GLtype z)

glTranlsate * () виробляє перенесення об'єкта, додаючи до координат його вершин значення своїх параметрів.

glRotate * () виробляє поворот об'єкту проти годинникової стрілки на кут angle (вимірюється в градусах) навколо вектора (x, y, z).

glScale * () виробляє масштабування об'єкта (стиснення або розтягнення) уздовж вектора (x, y, z), множачи відповідні координати його вершин на значення своїх параметрів. Всі ці перетворення змінюють поточну матрицю, а тому застосовуються до примітивів, які визначаються пізніше. У разі, якщо треба, наприклад, повернути один об'єкт сцени, а інший залишити нерухомим, зручно спочатку зберегти поточну видову матрицю в стеці командою glPushMatrix (), потім викликати glRotate () з потрібними параметрами, описати примітиви, з яких складається цей об'єкт, а потім відновити поточну матрицю командою glPopMatrix (). Крім зміни положення самого об'єкта, часто буває необхідно змінити положення спостерігача, що також призводить до зміни модельно-видової матриці. Це можна зробити за допомогою команди

void gluLookAt

(GLdouble eyex, GLdouble eyey, GLdouble eyez,

GLdouble centerx, GLdouble centery, GLdouble centerz,

GLdouble upx, GLdouble upy, GLdouble upz)

де точка (eyex, eyey, eyez) визначає точку спостереження, (centerx, centery, centerz) задає центр сцени, який буде проектуватися в центр області виведення, а вектор (upx, upy, upz) задає позитивний напрямок осі у, визначаючи поворот камери . Якщо, наприклад, камеру не треба повертати, то задається значення (0,1,0), а зі значенням (0, -1,0) сцена буде перевернута. Строго кажучи, ця команда робить перенос і поворот об'єктів сцени, але в такому вигляді задавати параметри буває зручніше. Слід зазначити, що викликати команду gluLookAt () має сенс перед визначенням перетворень об'єктів, коли модельно-видова матриця дорівнює одиничній.

15. Проецкціі

У OpenGL існують стандартні команди для завдання ортографической (паралельної) і перспективної проекцій. Перший тип проекції може бути заданий командами

void glOrtho (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far)

void gluOrtho2D (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top)

Мал. 6 Ортографічна проекція

Перша команда створює матрицю проекції в усічений обсяг видимості (паралелепіпед видимості) в лівосторонньої системі координат. Параметри команди задають точки (left, bottom, znear) і (right, top, zfar), які відповідають лівому нижньому і правому верхньому кутах вікна виведення. Параметри near і far задають відстань до ближньої і дальньої площин відсікання по віддаленню від точки (0,0,0) і можуть бути негативними. У другій команді, на відміну від першої, значення near і far встановлюються рівними -1 і 1 відповідно. Це зручно, якщо OpenGL використовується для малювання двовимірних об'єктів. У цьому випадку положення вершин можна задавати, використовуючи команди glVertex2 * () Перспективна проекція визначається командою

void gluPerspective (GLdouble angley, GLdouble aspect, GLdouble znear, GLdouble zfar) яка задає усічений конус видимості в лівосторонньої системі координат. Параметр angley визначає кут видимості в градусах по осі у і повинен знаходитися в діапазоні від 0 до 180. Кут видимості уздовж осі x задається параметром aspect, який зазвичай задається як відношення сторін області виведення (як правило, розмірів вікна) Параметри zfar і znear задають відстань від спостерігача до площин відсікання по глибині і повинні бути позитивними. Чим більше відношення zfar / znear, тим гірше в буфері глибини будуть відрізнятися розташовані поруч поверхні, так як за замовчуванням в нього буде записуватися 'стиснута' глибина в діапазоні від 0 до 1 (див. П. 0.).

Мал. 7 Перспективна проекція

Перш ніж ставити матриці проекцій, не забудьте включити режим роботи з потрібною матрицею командою glMatrixMode (GL_PROJECTION) і скинути поточну, викликавши glLoadIdentity ().

наприклад:

/ * Ортографічна проекція * /

glMatrixMode (GL_PROJECTION);

glLoadIdentity ();

glOrtho (0, w, 0, h, -1.0, 1.0);



Нормаль | область виводу

Коротка історія КГ | Еволюція засобів виведення | Міжнародна діяльність по стандартизації машинної графіки | поворот | для повороту | Управління контекстом дисплея. | Для промальовування зображення у додатки є | синтаксис команд | Специфікація матеріалів | підготовка текстури |

© um.co.ua - учбові матеріали та реферати