Я изучаю программируемый конвейер рендеринга, внедряя крошечный программный рендер. Я пытаюсь реализовать это в «аппаратном» стиле. Тем не менее, я не знаком с конвейером графического процессора и получил некоторые проблемы однородного отсечения.
Однородное пространство отсечения содержит переменную 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?
И как только я получу правильную точку пересечения, я должен сделать интерполяцию между объектами вершины, произведенными вершинным шейдером, чтобы получить новый объект вершины?
источник
Ответы:
Отсечение выполняется в трехмерном пространстве до деления '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, не имеет большого смысла для геометрии, это удобный выключатель для отключения перевода.
источник
Если вы спрашиваете о преобразовании однородных координат пространства клипа в координаты нормализованных координат устройства (NDC), процесс будет следующим:
<x y z w> → <x/w y/w z/w>
Это GDSE Q / A on Почему пространство клипа всегда называют «однородным пространством клипа»? также может быть полезным для вас.
источник