Детали того, что на самом деле делает 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?

И как только я получу правильную точку пересечения, я должен сделать интерполяцию между объектами вершины, произведенными вершинным шейдером, чтобы получить новый объект вершины?

stanleyerror
источник
Это кажется мне слишком большим количеством вопросов для одного поста и, вероятно, должно быть разделено. Общее правило - это отдельный вопрос (или, по крайней мере, ключевой вопрос) на пост.
Пикалек
@Pikalek Я удаляю два других вопроса и пытаюсь сделать эту тему разумной. Спасибо за ваш совет.
stanleyerror

Ответы:

1

Отсечение выполняется в трехмерном пространстве до деления 'w', а не в четырехмерном.

Графический процессор находит либо только ближнюю и дальнюю плоскости, либо все 6 трехмерных плоскостей усечения вида и привязывает к этому Geo.

Если бы деление w было сделано до того, как знак координат перевернулся бы для вершин позади глаза / камеры.

Если для разделения 3D перед w делением используются только ближние плоскости, то можно полагаться исключительно на 2D-отсечение на этапе растеризации для плоскостей x & y.


W - это просто проекционный делитель, напрямую связанный с Z, а не 4-е измерение. Матрица 4х4 - это «хак», включающий разделение перевода и проекции в удобном формате. Это работает только потому, что положения подразумеваются как (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 Q / A on Почему пространство клипа всегда называют «однородным пространством клипа»? также может быть полезным для вас.

Pikalek
источник
1
Спасибо за Ваш ответ. Однако моя проблема связана с интерполяцией. Скажем, две точки e1, e2 под трехмерной координатой глаза проецируются в четырехмерное однородное пространство отсечения h1, h2. Затем мы делаем интерполяцию в 4D однородном пространстве, отрезок h1-h2 обрезается в 4D точке h (t) = t * h1 + (1-t) * h2. Не теряя общности, предположим, что у нас есть часть h1-h (t) (которая просматривается), поступающая на стадию растеризации. Поэтому нам нужно сгенерировать соответствующие свойства вершин (такие же, как выходной формат вершинного шейдера). Мой вопрос заключается в том, как создать свойства этих новых вершин?
stanleyerror
Насколько я понимаю, интерполяция не выполняется в HCS, но я могу ошибаться. Если вы не получите больше / лучше ответов здесь, вы можете попробовать повторно выполнить переход на SO.
Пикалек
Хорошо. Могу ли я напрямую перенести этот поток в SO или мне нужно заново открыть новый вопрос там.
stanleyerror
Моя ошибка в том, что я предложил вам повторно спросить; кросс-постинг вообще не рекомендуется .
Пикалек
Я думаю, что администраторы могут мигрировать, хотя.
Сидар