Это тоже самое, что и обычный Z-буфер, только для одной строки. OZ-буфер – это одномерный массив глубины для пикселов строки. Перед рисованием очередной строки его нужно очистить, занеся максимальное значение глубины. Также вычисляется глубина для каждого пиксела, сравнивается со значением в OZ-буфере и заносится, если пиксел находится ближе.
void PPOZB(x,y,z){ if (z<OZBuffer[x]) { OZBuffer[x]=z; PP(x,y); } }
Здесь можно использовать когерентность как и в Z-буфере (описанные тела, восьмеричные деревья, пирамидальную иерархию OZ-буферов, сохранение списка видимых на данном кадре граней), плюс когерентность между соседними строками, например запоминать видимые на текущей строке грани и выводить их первыми на следующей.
Список видимых спанов (S-буфер)
Это аналог алгоритма Робертса. Спаны последовательно заносятся в список видимых спанов, в этом списке хранятся только видимые части спанов. При занесении, новый спан поочередно сравнивается с уже существующими, здесь может быть несколько случаев.
· проекции спанов на строку не пересекаются;
· спан полностью закрыт другим спаном – он игнорируется;
· спан частично закрыт другим спаном – он отсекается;
· два спана пересекаются – они оба отсекаются;
Здесь тоже можно использовать когерентность, например, заносить видимые спаны (на предыдущей строке, кадре) раньше невидимых.