Про перетворення координат 3D-моделей
речовина
Передусім
Ви можете часто бачити 3D-зображення на екранах телевізорів і дисплеях в іграх, але як відображати об'єкти, які існують у 3D-просторі, такі як персонажі та будівлі, які рухаються на екрані, на 2D-екрані?
У 2D іграх в якості значень координат присутні тільки двовимірні елементи «X і Y», а дисплей теж 2D, тому якщо ви намалюєте об'єкт, вказавши положення координат X і Y, то інтуїтивно зрозумієте, як він буде намальований в якій позиції.
Однак в 3D це не так просто. Як випливає з назви, 3D є «тривимірним» і має три координати: «X, Y і Z». Оскільки координати відрізняються від дисплея, тобто 2D, неможливо намалювати об'єкт таким, яким він є.
Тоді що робити, так це «перетворювати тривимірну інформацію в двовимірну». Це зазвичай називають «перетворенням координат». Майте на увазі, що це перетворення координат має важливе значення для 3D-програмування.
Існує кілька типів перетворень координат для перетворення 3D в 2D, але є три основних типи перетворень координат, якими займаються програмісти: «перетворення світу», «перетворення виду» і «перетворення проекції». Тут ми пояснимо все, що пов'язано з перетворенням координат.
Лівостороння і правостороння системи координат
У 3D існують дві системи координат, «лівостороння система координат» і «правостороння система координат», які мають різну орієнтацію для кожної координати, як показано на малюнку нижче.
У Direct3D в основному використовується лівостороння система координат, але є також функції для обчислення для правосторонніх систем координат. Однак XNA надає методи розрахунку лише для правосторонніх систем координат. Це, мабуть, узгоджується з тим, що в інших додатках часто використовуються правосторонні системи координат.
У всіх наконечниках XNA на цьому сайті використовується правостороння система координат.
Локальна система координат (модельна система координат)
Кожна модель має систему координат з центром на початку координат. При створенні моделі за допомогою програмного забезпечення для моделювання, я думаю, простіше зрозуміти, якщо уявити її створення з початком координат в центрі.
Світова система координат
Світова система координат дозволяє розмістити модель в будь-якому місці. Якщо нічого не робити в цьому перетворенні світу, то модель буде розміщена на початку координат так само, як і локальні координати. Розміщення полягає не тільки в переміщенні від початку координат, але і в обертанні і масштабуванні.
Переглянути систему координат
Після того, як ви розмістили модель у світових координатах, вам потрібна інформація про те, куди ви дивитеся і де ви дивитеся на 3D-простір. Це те, що ми називаємо «перетвореннями виду». Перетворення перегляду, як правило, часто представляються у вигляді камер.
Параметрами, необхідними для цього перетворення, є «положення камери», «точка інтересу камери» та «напрямок камери вгору». Орієнтація камери визначається цими трьома параметрами. На малюнку нижче показана камера з точки зору третьої сторони.
Малюнок нижче насправді видно з точки зору камери з розташуванням, показаним на малюнку вище (на даний момент ми ще не перетворили координати на екран, тому це просто зображення).
У попередньому поясненні здається, що камера розташована і координати перетворилися, але в реальному розрахунку координати світу перетворюються відповідно до положення та орієнтації камери. Отже, початком координат є положення камери, як показано на малюнку нижче.
Проективна система координат
Після того, як ви визначилися, з якої позиції переглядати 3D простір, наступним кроком буде обробка відображення «дрібних об'єктів, які знаходяться далеко» і «великих предметів, які знаходяться поблизу». Це називається проективним перетворенням. Існує два методи перетворення проекції: «перспективна проекція» і «ортогональна проекція», але часто використовується зображення «перспективна проекція».
Для проекції перспективи використовуються такі параметри: кут огляду, співвідношення сторін, положення кліпу вперед і положення заднього затиску. Область з написом «усечка» на малюнку вище нарешті з'явиться на екрані.
«Кут огляду» визначає діапазон огляду, видимий із камери. Зменшення кута збільшує масштаб, а збільшення – зменшує. Кут огляду і буде величиною по вертикалі усечки.
Співвідношення сторін використовується для визначення горизонтального кута огляду, тоді як кут огляду є вертикальним кутом. Горизонтальний кут зазвичай визначається «співвідношенням кута огляду × сторін», а співвідношення сторін — це в основному значення «ширини ÷ висоти» екрана, який ви намагаєтеся відобразити. Якщо змінити це значення, відображуваний 3D-об'єкт буде розтягуватися по горизонталі або вертикалі.
Положення затискача вперед і положення заднього затискача визначаються для визначення того, чи відображається об'єкт у передньому чи задньому діапазоні. Через особливості комп'ютера неможливо відображати до нескінченності, тому ми встановимо обмеження. Це значення також впливає на точність роботи Z-буфера, тому не рекомендується включати його в область малювання за межами діапазону, який не потрібно виводити.
Об'єкт, перетворений у перспективу, перетворюється на простір, подібний до наведеного нижче. Об'єкти, які перебували близько до камери, збільшуються, а об'єкти, які були далеко.
Це проілюстровано на зручній для розуміння схемі нижче.
Якщо насправді подивитися на це з точки зору камери, то це виглядає так, як показано нижче.
Іншим методом проективного перетворення є ортогональна проекція, яка проектує видиму область, таку як наведена нижче. Оскільки ширина і висота є постійними незалежно від глибини, розмір об'єкта не змінюється з глибиною.
Система координат екрану
Після перетворення проекції вона перетворюється в координати фактичного екрану. Незважаючи на те, що це екран, положення та діапазон дисплея змінюються залежно від налаштувань вікна перегляду, встановлених на пристрої. Однак, у випадку з іграми, координати клієнта вікна часто є вікном перегляду як таким, тому я не думаю, що вам потрібно надто хвилюватися.
Координати екрану (0, 0) перетворюються з координат проекції (-1, 1, z). Аналогічно перетворюються координати екрана (ширина, висота) з координат проекції (1, -1 ,z).