Предположим, что в нашем распоряжении имеется буфер - назовем его 2-буфером, - который имеет такую же организацию, как и буфер кадра, а разрядность каждой ячейки достаточна для хранения информации о глубине с приемлемой для качества изображения точностью. Например, если формат изображения 1024x1280 пикселей и расстояние в графической системе представляется действительным числом с однократной точностью, то в г-буфере должно быть 1024x1280 32-разрядных ячеек. Перед началом растрового преобразования объектов сцены в каждую ячейку заносится код, соответствующий максимальному расстоянию
Рис. 7.30. Алгоритм z-буфера
Алгоритмы формирования изображения
от центра проецирования6. Буфер кадра в исходном состоянии заполняется кодами цвета фона. В процессе растрового преобразования объектов каждая ячейка z-буфера содержит значение расстояния до ближайшего из обработанных ранее многоугольников вдоль проецирующего луча, проходящего через соответствующий пиксель пространства изображения.
Процесс заполнения z-буфера выглядит в первом приближении следующим образом. Все многоугольники в описании сцены последовательно, один за другим, подвергаются растровому преобразованию одним из методов, описанных в разделе 7.10. Для каждой точки на многоугольнике, которая проецируется на определенный пиксель, вычисляется расстояние до центра проецирования. Это расстояние сравнивается с уже хранящимся в той ячейке z-буфера, которая соответствует формируемому пикселю. Если расстояние до текущего многоугольника больше хранящегося в z-буфере, значит, ранее был обработан многоугольник, расположенный ближе к наблюдателю, который, таким образом, загораживает текущий. Следовательно, данная точка текущего многоугольника не будет видима и информацию о ее цвете не нужно заносить в буфер кадра. Если же вычисленное расстояние меньше того, что хранится в z-буфере, значит, текущий многоугольник сам загораживает те, что были обработаны ранее, и его код цвета должен заменить в буфере кадра код цвета, сформированный ранее. Одновременно вычисленное только что расстояние заносится в соответствующую ячейку z-буфера7.