Вопросы к 32 - chrislvt/CG GitHub Wiki
-
Что хранится для Z-буфера?
Это буфер глубины, в нем хранятся координаты z для каждого пикселя. -
И какого объема он должен быть? Сколько памяти нам потребуется выделять?
Вот у вас экран 3 млн ячеек имеет. Какой тип данных будет использоваться?
Вещественный.
А вещественный сколько байт 4 или 8?
4.
А почему 4 достаточно?
Этого достаточно, чтобы сравнить два значения по Z.
Альтернативный ответ: Зависит от кол-во пикселей в окне (1920*1080 ~ 2-3 лимона). Храним вещественные значения в буфере (с точностью float (высокая не нужна потому что нам нужно не само значение, а сравнивать значения)). 2-3 лимона * 4-8 байт = 8-24 лимонов байт = .8-12 Мбайт. Не очень много по современным меркам. Но вот в 1994 году.... 170 Мб - очень много.
- Значит глубину вы откуда будете вычислять, узнавать?
Из уравнения плоскости.
Вот вычисляете, а С оказалось равным нулю. Такое может быть?
Может.
И что делать тогда? Глубину не можем вычислить ведь
Уравнение плоскости: 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)
- Где хранится интенсивность?
В буфере кадра