Чому?
Тому що, камера являє собою проекційний вигляд.
Але у випадку 3D-камери (віртуальної камери) камера рухається замість світу. Пізніше я зробив детальне пояснення цієї відповіді.
Розуміння математично
Проекційний перегляд переміщається по простору та змінює свою орієнтацію. Перше, що слід помітити, - це те, що бажана проекція на екрані не змінюється з напрямом перегляду.
З цієї причини ми перетворюємо інші речі, щоб отримати бажану проекцію.
Розуміння з http://opengl.org
Щоб створити зовнішній вигляд переміщення камери, ваша програма OpenGL повинна перемістити сцену з оберненою формою перетворення камери. що стосується OpenGL, то камери немає. Більш конкретно, камера завжди розташована за координатою простору очей (0, 0, 0)
Розуміння з http://open.gl
Також хочемо поділитися наступними рядками з частини матриці Переглянути http://open.gl/transformations
Щоб імітувати перетворення камери, ви насправді повинні перетворити світ із зворотною цією трансформацією. Приклад: якщо ви хочете перемістити камеру вгору, вам слід зрушити світ вниз.
Розуміння за перспективою
У реальному світі ми бачимо речі таким чином, що називається "перспектива".
Перспектива стосується поняття, що віддалені об'єкти здаються меншими, ніж ті, які вам ближче. Перспектива також означає, що якщо ви сидите посеред прямої дороги, ви насправді бачите межі дороги як дві збіжні лінії.
Така перспектива. Перспектива є критичною у 3D-проектах. Без перспективи 3D-світ не виглядає реальним.
Хоча це може здатися природним і очевидним, важливо враховувати, що при створенні 3D-рендерінгу на комп'ютері ви намагаєтеся імітувати 3D-світ на екрані комп'ютера, який є двовимірною поверхнею.
Уявіть, що за екраном комп’ютера стоїть справжня тривимірна сцена, і ви переглядаєте його через "скло" екрану комп'ютера. Використовуючи перспективу, ваша мета полягає у створенні коду, який відображатиме те, що стає "проектованим" на цьому "склі" вашого екрану, як ніби за цим екраном був справжній 3D-світ. Єдине застереження полягає в тому, що цей 3D-світ не є реальним ... це просто математичне моделювання 3D-світу.
Отже, коли використовується 3D-рендерінг для імітації сцени в 3D, а потім проектування 3D-сцени на 2D-поверхню екрану, процес називається перспективним проекцією.
Почніть з інтуїтивно уявленого, чого ви хочете досягти. Якщо об’єкт знаходиться ближче до глядача, об’єкт повинен здатися більшим. Якщо об’єкт знаходиться далі, він повинен здатися меншим. Крім того, якщо об’єкт відходить від глядача по прямій лінії, ви хочете, щоб він сходився до центру екрана, оскільки він рухається далі вдалину.
Переклад точки зору на математику
Переглядаючи ілюстрацію на наступному малюнку, уявіть, що об’єкт розміщений у вашій 3D-сцені. У тривимірному світі положення об'єкта можна описати як xW, yW, zW, посилаючись на 3D координатну систему з початком у точці ока. Ось де об’єкт розміщений насправді, в 3D-сцені поза екраном.
Коли глядач спостерігає за цим об'єктом на екрані, 3D-об’єкт «проектується» у 2D-положення, описане як xP та yP, яке посилається на 2D-систему координат екрану (площину проекції).
Щоб ввести ці значення в математичну формулу, я використовую систему 3D координат для світових координат, де вісь x вказує праворуч, y вказує вгору та позитивні точки z всередині екрана. Тривимірність 3D позначає розташування очей глядача. Отже, скло екрана знаходиться на площині, ортогональній (під прямим кутом) до осі z, на деякій z, яку я назву zProj.
Ви можете обчислити прогнозовані позиції xP та yP, поділивши світові позиції xW та yW, на zW, таким чином:
xP = K1 * xW / zW yP
= K2 * yW / zW
K1 і K2 - константи, які походять від геометричних факторів, таких як співвідношення сторін вашої проекційної площини (вашого огляду) та "поле зору" вашого ока, яке враховує ступінь ширококутного зору.
Ви можете бачити, як це перетворення імітує перспективу. Окуляри біля сторін екрана відсуваються до центру, оскільки відстань від ока (zW) збільшується. У той же час точки, розташовані ближче до центру (0,0), значно менше впливають на відстань від ока і залишаються близько до центру.
Цей поділ на z є відомим "перспективним поділом".
Тепер розглянемо, що об’єкт на сцені 3D визначається як серія вершин. Таким чином, застосовуючи такий вид перетворення на всі вершини геометрії, ви ефективно гарантуєте, що об’єкт скоротиться, коли він знаходиться далі від точки зору.
Інші важливі справи
- У випадку 3D-камери (віртуальної камери) камера рухається замість світу.
Щоб краще зрозуміти тривимірні камери, уявіть, що ви знімаєте фільм. Ви повинні створити сцену, яку ви хочете зняти, і вам потрібна камера. Щоб отримати кадри, ви будете бродити по сцені з камерою, знімаючи предмети в сцені з різних ракурсів і точок зору.
Той самий процес зйомки відбувається з 3D камерою. Вам потрібна "віртуальна" камера, яка може блукати навколо створеної вами "віртуальної" сцени.
Два популярні стилі зйомки передбачають спостереження за світом очима персонажа (також відомий як камера від першої особи) або наведення камери на персонажа і збереження їх у зорі (відомий як камера третьої особи).
Це основна передумова тривимірної камери: віртуальна камера, яку можна використовувати для розгуляння по 3D-сцені та відтворення кадру з певної точки зору.
Розуміння світового простору та погляд на простір
Для кодування такої поведінки ви будете виводити вміст тривимірного світу з точки зору камери, а не лише з точки зору світової системи координат або з якоїсь іншої фіксованої точки зору.
Взагалі кажучи, 3D-сцена містить набір 3D-моделей. Моделі визначаються як набір вершин і трикутників, посилаючись на власну систему координат. Простір, в якому визначені моделі, називається модельним (або локальним) простором.
Розмістивши об'єкти моделі в 3D-сцені, ви будете перетворювати вершини цих моделей за допомогою матриці "перетворення світу". Кожен об’єкт має свою матрицю світу, яка визначає, де знаходиться об’єкт у світі та як він орієнтований.
Ця нова система відліку називається "світовий простір" (або глобальний простір). Простий спосіб управління ним - приєднання до кожного об'єкта матриці перетворення світу.
Для того, щоб реалізувати поведінку 3D-камери, вам потрібно буде виконати додаткові дії. Ви посилаєтесь на світ - не на світове походження - а на систему відліку самої 3D-камери.
Хороша стратегія передбачає трактування камери як фактичного 3D-об'єкта в 3D-світі. Як і будь-який інший 3D-об’єкт, ви використовуєте матрицю "перетворення світу", щоб розмістити камеру в потрібному положенні та орієнтації в 3D-світі. Ця матриця перетворення світу камери перетворює об’єкт камери від початкового, дивлячись обертання вперед (уздовж осі z), у фактичне положення світу (xc, yc, zc) та обертання світу.
На наступному малюнку показані зв’язки між системою координат Світу (x, y, z) та системою координат Вид (камера) (x ', y', z ').