Получение строк сканирования произвольного двумерного треугольника

Как можно получить строки сканирования для всех строк в двумерном треугольнике?

Я пытаюсь реализовать самую базовую функцию программного рендерера 2D, а именно треугольники наложения текстур. Я делал это больше раз, чем я могу сосчитать, используя OpenGL, но я обнаружил, что хромаю, пытаясь сделать это самостоятельно.

Я вижу ряд статей, в которых говорится, что для заполнения треугольника (три вершины которого имеют текстурные координаты, привязанные к [0, 1]), мне нужно линейно интерполировать между тремя точками. Какие? Я думал, что интерполяция была между двумя n-мерными значениями.

ПРИМЕЧАНИЕ; Это не для 3D, это строго 2D, все треугольники произвольны (никоим образом не выровнены по оси). Мне просто нужно заполнить экран их текстурами, как это сделал бы OpenGL. Я не могу использовать OpenGL в качестве решения.


person Knetic    schedule 13.01.2012    source источник


Ответы (2)


Отличный ответ и описание можно найти здесь: http://sol.gfxile.net/tri/index.html

Вы можете использовать алгоритм Брезенхэма, чтобы нарисовать/найти стороны.

person Emond Erno    schedule 14.01.2012
comment
Это на самом деле имеет большой смысл сейчас, я совершенно ускользнул от того, что мне нужно было интерполировать каждую сторону треугольника, а затем делать из этого сканлайн, я ожидал чего-то другого. - person Knetic; 16.01.2012
comment
@Knetic - Если вы можете придумать радикально новый, более эффективный способ; не сдерживайтесь и не чувствуйте себя ограниченным текущим способом, которым это делается. Только так мы прогрессируем. :) - person Emond Erno; 16.01.2012

Один из способов справиться с этим - интерполировать в два шага, если вы используете алгоритм сканирования. Сначала вы интерполируете значение на краях треугольника, а когда вы начинаете рисовать линию развертки, вы интерполируете между начальным и конечным значением этой строки развертки.

Поскольку вы работаете в 2D, вы также можете использовать матричное преобразование, чтобы получить координату экрана в координату текстуры. Вчера я ответил на аналогичный вопрос здесь. В математике этот метод называется изменением основы.

person Community    schedule 13.01.2012