Призначення матриці проекційного перегляду моделей


102

Для яких цілей ми використовуємо матрицю проекційного перегляду моделей? Чому для шейдерів потрібна матриця проекційного перегляду моделей?


12
Просто перевірте це посилання: songho.ca/opengl/gl_transform.html
iKushal

3
Я запропонував відкрити сайт Stack Exchange, присвячений комп'ютерній графіці, і вибрав це питання як приклад . Слідкуйте за computergraphics.stackexchange.com, якщо вам цікаво бачити запуск сайту!
витирайте

Відповіді:


196

Матриці моделі, перегляду та проекції - це три окремі матриці. Моделюйте карти з місцевого координатного простору об'єкта у світовий простір, вид із світового простору в простір камери, проекція з камери на екран.

Якщо скласти всі три, ви можете використати один результат для відображення всього шляху від об'єктного простору до простору екрану, завдяки чому ви зможете розробити те, що потрібно перейти до наступного етапу програмованого конвеєра з позицій вхідних вершин.

У трубопроводах з фіксованою функціональністю старої моделі слід застосовувати модель та переглядати разом, а потім відпрацьовувати освітлення, використовуючи інший результат, отриманий від них (з деякими виправленнями, так що, наприклад, нормалі залишаються одиничною довжиною, навіть якщо ви застосували певне масштабування до об'єкта ), потім застосуйте проекцію. Ви можете бачити, що відображено у OpenGL, який ніколи не розділяє модель та переглядає матриці - зберігаючи їх як єдиний матричний стек перегляду моделі. Тому ви також іноді бачите, що відображено в шейдерах.

Отже: складена матриця проекційного перегляду моделей часто використовується шейдерами для зіставлення вершин, завантажених для кожної моделі, на екран. Це не потрібно, існує безліч способів досягнення одного і того ж, це просто звичайно, оскільки він дозволяє всі можливі лінійні перетворення. Через це менша складова його версія була також нормою у світі старого трубопроводу.


3
тому для кількох об'єктів (сіток) нам потрібно кілька матриць modelView, чи не так?
Юрій Вікулов

5
Якщо припустити, що вони можуть рухатися незалежно або розміщуватися окремо, то так. Отже, далеко не найпоширеніший спосіб продовження - передайте modelView або projectionModelView як рівномірну програму шейдерів, встановивши її для поточної моделі на процесорі.
Томмі

Привіт Томмі, ви можете запропонувати будь-який зразок коду для функціональності панорамування в Opengl Es2.0 в Android, використовуючи цю матрицю проекційного перегляду моделі, якщо це можливо. Я переглянув більше посилань, я не міг отримати чіткої ідеї. Якщо якийсь зразок коду означає, його легко зрозуміти для мене ..
harikrishnan

1
У мене є питання. Якщо openGL використовує матрицю MV як єдину, і якщо ми підемо з простору камери у світовий простір, нам знадобиться обернути (проекційна матриця * матриця перегляду) * (положення курсору), але якщо перегляд моделі - це одна складена матриця. як ми відокремлюємо модель та матрицю перегляду, щоб я міг використовувати матрицю подання для цього розрахунку. Тож мені потрібно тримати їх окремо?
Evren Bingøl

@ EvrenBingøl Ви вже отримали свою відповідь? Я тримав свою модель і переглядав матриці окремо, але хотів би дізнатися фактичну відповідь на ваше запитання, чи варто продовжувати робити її окремо чи ні.
tom_mai78101

9

Тому що матриці зручні. Матриці допомагають перетворити місцеположення / напрямки відносно різних просторів (Простір можна визначити за допомогою 3 перпендикулярних осей та початку).

Ось приклад із книги, вказаної в коментарях @ legends2k.

Мешканці Картесії використовують карту свого міста з походженням, досить чітко зосередженим у центрі міста, і осями, направленими уздовж кардинальних точок циркуля. Мешканці Дислексії використовують карту свого міста з координованими центрами у довільній точці та осями, що проходять у деяких довільних напрямках, що, напевно, здавалося гарною ідеєю на той час. Громадяни обох міст цілком задоволені відповідними картами, але Державний інженер з транспорту призначив завдання скласти бюджет на першу автомагістраль між Картесією та Дислексія, яка потребує карти, де відображаються деталі обох міст, а тому вводить третю координату Система, яка перевершує його, хоча не обов'язково для когось іншого.

Ось ще один приклад,

Припустимо, що ви створили автомобільний об’єкт у грі з його вершинними положеннями, використовуючи світові координати. Припустимо, ви повинні використовувати цей самий автомобіль у якійсь іншій грі зовсім іншого світу, вам доведеться ще раз визначити позиції, і розрахунки будуть складними. Це тому, що вам знову доведеться обчислити положення вікна, капота, фари, коліс тощо, в машині по відношенню до нового світу.

Дивіться це відео, щоб зрозуміти поняття моделі, перегляду та проекції. (Настійно рекомендується)

Потім перегляньте це, щоб зрозуміти, як вершини у світі представлені як матриці та як вони перетворюються.


Якщо ви подумаєте про це глибоко, ви зрозумієте, що хоча і все перетворення відбувається за походженням об'єкта (тобто єдиної точки), всі вершини об'єкта (сітка / модель формально) піддаються перетворенню, тобто всі 1000 вершин будуть примножені за матрицею моделі. Отже, ваша думка недостатньо сформована. Матриця моделі - це просто матриця, яка перетворює вершини в просторі моделі в світовий простір. Тут немає користі від продуктивності, це лише зручність.
legends2k

Якщо так, то чому вони просто не представляють кожну точку в одному 3D-просторі? Коли ви використовуєте вихід сцени на іншу сцену, повинні бути переваги, які можуть стати входом до іншої рухомої сцени :)
cegprakash

1
Вони не представляють усіх вершин в одному просторі, оскільки зручно працювати у відносному просторі, ніж у великому просторі, як у світі. Скажіть, робот, коли йому наказано рухатись на 2 метри вперед, робити це, щоб його око було для нього більш підходящим, ніж розміщення центру світу, а потім обчислити правильні результативні координати.
legends2k

Я думаю, ви маєте рацію .. Так чи інакше, шейдер фрагмента буде викликаний для кожного пікселя, і ми будемо виконувати матричне множення для кожного пікселя у випадку складних сіток. : |
cegprakash

2
У фрагментарному шейдері проводяться лише розрахунки освітлення / фарбування, до того часу, коли дані досягають фрагмента шейдера, всі обчислення положення завершені (тобто у вершинній шейдері); краще пояснення того, чому використовувати декілька систем координат, є тут . Ця книга є чудовим математичним ресурсом 3D-ігор. Та сама глава, як зразок PDF із веб-сайту книги .
legends2k
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.