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

  1. Что хранится для Z-буфера?
    Это буфер глубины, в нем хранятся координаты z для каждого пикселя.

  2. И какого объема он должен быть? Сколько памяти нам потребуется выделять?
    Вот у вас экран 3 млн ячеек имеет. Какой тип данных будет использоваться?
    Вещественный.
    А вещественный сколько байт 4 или 8?
    4.
    А почему 4 достаточно?
    Этого достаточно, чтобы сравнить два значения по Z.

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

  1. Значит глубину вы откуда будете вычислять, узнавать?
    Из уравнения плоскости.
    Вот вычисляете, а С оказалось равным нулю. Такое может быть?
    Может.
    И что делать тогда? Глубину не можем вычислить ведь
    Уравнение плоскости: 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)

  1. Где хранится интенсивность?
    В буфере кадра