Я пишу программный рендерер, который в настоящее время работает хорошо, но я пытаюсь получить перспективную коррекцию координат текстуры, и это, кажется, не правильно.Я использую все ту же матричную математику, что и opengl для моего рендерера.Чтобы растеризовать треугольник, я делаю следующее:
преобразуем вершины, используя матрицы модели и проекции, и преобразуем в координаты клипа.
длякаждый пиксель в каждом треугольнике, вычислить барицентрические координаты для интерполяции свойств (цвет, координаты текстуры, нормали и т.вершина, c - текстурная координата вершины, b - барицентрический вес вершины)
1/w = b0*(1/w0) + b1*(1/w1) + b2*(1/w2)
c/w = b0*(c0/w0) + b1*(c1/w1) + b2*(c2/w2)
c = (c/w)/(1/w)
Это должно исправить для перспективы, и это немного помогает, но есть еще очевидная перспективная проблема.Я что-то здесь упускаю, возможно, некоторые проблемы с округлением (я использую поплавки для всей математики)?
Смотрите на этом изображении ошибку в текстурных координатах, видимую вдоль диагонали, это результат, сделавший делениепо координатам глубины.
Кроме того, это обычно делается для координат текстуры ... это необходимо и для других свойств (например, нормалей и т. д.)?