Я изучаю программируемый конвейер рендеринга, внедряя крошечный программный рендер. Я пытаюсь реализовать это в «аппаратном» стиле. Тем не менее, я не знаком с конвейером графического процессора и получил некоторые проблемы однородного отсечения.
Однородное пространство отсечения содержит переменную 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?
И как только я получу правильную точку пересечения, я должен сделать интерполяцию между объектами вершины, произведенными вершинным шейдером, чтобы получить новый объект вершины?