Вопросы к 34 - p1xelse/CG GitHub Wiki

В связи с чем появились алгоритм построчного сканирования?

Использование z-буфера занимает много памяти. Мы его сводим к хранению одной строки.

А сколько памяти z-буфер? Много по каким меркам?

Зависит от кол-во пикселей в окне (1920*1080 ~ 2-3 лимона). Храним (глубину) вещественные значения в буфере (с точностью float (высокая не нужна потому что нам нужно не само значение, а сравнивать значения)). 2-3 лимона * 4-8 байт = 8-24 лимонов байт = .8-12 Мбайт. Не очень много по современным меркам. Но вот в 1994 году.... 170 Мб - очень много.

Определяете delta_z (x, y). Делите на c. А если c = 0? Что означает c = 0? Как для неё определить глубину?

Уравнение плоскости: Ax+By+Cz+D=0. Для прямоугольника Z=-(Ax+By+D)/C, С!=0. Если С==0, то прямоугольник расположен параллельно вектору взгляда – отрисовывать нужно линию или вершину. Используется уравнение ребра; (z-z1)/(z2-z1)=(y-y1)/(y2-y1), если координаты не равны. Если же равны, ребро горизонтально, отрисовывается точка.

При y2 != y1

z=z1 + (y-y1)/(y2 - y1)*(z2-z1)

При y2 == y1

z = max(z2, z1)