Подробиці того, що насправді робить GPU під час відсікання у однорідному просторі 4D?


10

Я вивчаю програмований конвеєр рендерінгу, впроваджуючи крихітний програмний рендер. Я намагаюся реалізувати це в «апаратному» стилі. Однак я не знайомий з конвеєром графічних процесорів і мав деякі проблеми однорідного відсікання.

Однорідний простір відсікання містить змінну w, різну в кожній вершині. Чи є однорідна координата кожного вершинного об’єкта (між матрицею проекції та гомогенним поділом на w) на власному просторі відсікання? Якщо так, як обрізати лінії та трикутники ближче, ніж Frustum або навіть тягнуться за камерою (тобто w <= frustum_znear)?

Оновлення : цей потік говорить, що відсікання в однорідному просторі є безпосередньо проблемою перетину в однорідному просторі 4D. Що означає точку перетину p_vec4 = t * point1_vec4 + (1 - t) * point2_vec4. Скажіть, у мене є P0(-70, -70, 118, 120)і P1(-32, -99, -13, -11)в однорідному просторі 4D, і точка перетину з plane w = -z(яка в NDC z = -1) полягає в тому (-35, -96, -1, 0.9) t = 0.99, як отримати відповідний вершинний об’єкт у просторі NDC?

І як тільки я отримаю правильну точку перетину, чи слід робити інтерполяцію між вершинними об'єктами, виробленими вершиновим шейдером, щоб отримати новий об’єкт вершини?


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

@Pikalek Я видаляю два інших питання і намагаюся зробити цю тему розумною. Дякую за вашу пораду.
Stanleyerror

Відповіді:


1

Відсікання виконується в тривимірному просторі перед поділом 'w', а не в 4D просторі.

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

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

Якщо до тривимірного затискання використовуються лише далекі літаки перед діленням, то вони можуть покладатися виключно на двовимірне відсікання на етапі растеризації для площин x & y.


W - це просто дільник проекції, безпосередньо пов'язаний із Z, а не насправді четвертий вимір. Матриця 4x4 - це "хак" для включення перекладу перекладу та проекції у зручному форматі. Це працює лише тому, що позиції маються на увазі як (x, y, z, 1), а нормали маються на увазі як (x, y, z, 0).

Але це насправді не 4 незалежні виміри.

Будь-яке інше значення для "W", яке не дорівнює 1 або 0, не має сенсу для геометрії, це зручний перемикач увімкнення / вимкнення для відключення перекладу.


0

Якщо ви запитуєте про перетворення однорідних просторів кліпів простору в нормалізовані координати пристроїв (NDC), процес: <x y z w> → <x/w y/w z/w>

Цей запит GDSE на тему Чому простір кліпів завжди називають "однорідним простором кліпу"? також може бути корисним для вас.


1
Дякую за вашу відповідь. Однак моя проблема полягає в інтерполяції. Скажімо, дві точки e1, e2 під 3D-координатою очей проектуються на 4D однорідний відсічний простір h1, h2. Тоді робимо інтерполяцію в однорідному просторі 4D, відрізок h1-h2 відсікаємо в точці 4D h (t) = t * h1 + (1-t) * h2. Не втрачаючи загальності, припустимо, у нас є h1-h (t) частина (яку можна побачити) подавання до стадії растеризації. Тому нам потрібно генерувати відповідні властивості вершин (те саме, що і вихідний формат вершинного шейдера). Моє запитання - як генерувати ці нові властивості вершин?
Stanleyerror

Я розумію, що інтерполяція не проводиться в HCS, але я можу помилитися. Якщо ви не отримаєте більше / кращих відповідей тут, ви можете спробувати переосмислити / перейти на SO.
Пікалек

Добре. Чи можу я безпосередньо перенести цю тему на SO, або мені потрібно знову відкрити нове запитання.
staleyerror

Моя помилка в тому, що пропоную вам повторно запитати; перехресне повідомлення, як правило, не рекомендується .
Пікалек

Я думаю, що адміністратори можуть мігрувати тхо.
Сидар
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.