Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Z-буфер


Автор: gluk24 6.1.2005, 19:22
Помогите пожалуйста!!!!!!!!!!!!!!!!!!!!!!!!

Расскажите о алгоритме Z-буфера, Как он работает и какие виды его бывают?

plizzz а то меня уже 3 раза препод на этом вопросе запорол по курсачу...

smile

Автор: Xerx 28.5.2005, 11:40
Создаешь двумерный массив вещ. чисел (еще можно целых чисел, но это w-буфер). Заполняешь его максимальным или минимальным значением (по желанию: если z вперед - минимальным, ...). Пи выводе каждой точки проверяешь ее z-координату со значением в позиции (x, y) на экране. Координаты, конечно, уже экранные. Если z меньше (ось z вперед) - выводишь, иначе нет... Понятно?
smile

Автор: Shadex 29.5.2005, 12:50
Вот теория Z-буфера:
Метод z-буфера является одним из простейших и наиболее используемых методов удаления невидимых поверхностей в компьютерной графике.
Z-буфер это область в оперативной памяти компьютера или графического контроллера, в которой для каждого пикселя изображения, формируемого на экране дисплея в процессе компьютерной сцены, хранится информация о значениях глубины. Под "глубиной" понимается расстояние от каждой точки поверхности объектов сцены до некоторой произвольной, но фиксированной поверхности, расположенной за сценой.
Схема алгоритма удаления невидимых поверхностей весьма проста. В начале просчета очередного кадра, во всех ячейках видеобуфера установлен цвет фона, а все значения z-буфера равны 0. Z-буфер содержит ровно одну ячейку для каждого пикселя изображения. Далее, для всех пикселей и всех поверхностей производится определение глубины.
Если для определенной поверхности глубина, вычисленная для данного пикселя, окажется больше, чем записанная ранее, то значение z-буфера для данного пикселя будет обновлено. В него будет занесено большее из двух значений и пикселю будет присвоен цвет рассматриваемой поверхности. Если это расстояние меньше, чем ранее записанное, то в ячейке z-буфера останется старое значение глубины и цвет пикселя не изменится. Когда будут просмотрены все пиксели и поверхности сцены , в z-буфере будет храниться информация о значениях глубины всех пикселей изображения, а в видеобуфере - изображение с удаленными невидимыми поверхностями.
Разрешающая способность z-буфера определяет точность представления глубины. Она критична для высококачественного рендеринга сцен с большой глубиной. Чем выше разрешающая способность, тем выше дискретность z-координат и точнее выполняется рендеринг удаленных объектов. 24-разрядный z-буфер дает разрешающую способность 16 миллионов, 32-разрядный - 2 миллиарда, а 16-разрядный - только 64 тысячи. Если при рендеринге разрешающей способности не хватает, то может случиться, что две перекрывающиеся поверхности получат одну и ту же глубину, возникнет побочный эффект, называемый "triangle desposition". Для исключения ошибок в определении глубины, профессиональные платы имеют 32-разрядный z-буфер.
Z-буферизация при аппаратной реализации сильно увеличивает производительность. Тем не менее, z-буфер занимает много памяти: например даже в разрешении 640x480 24-разрядный z-буфер будет занимать около 900 KB. Однако расходы на дополнительную память оправдывают себя, так как все больше программ, в том числе и игры используют z-буфер (например, Quake и др.) и без него производительность существенно снижается (в отсутствие аппаратного z-буфера обсчет изображений осуществляется программно, через центральный процессор и оперативную память).
Надеюсь теперь будет понятней! Дерзай! smile

Автор: Div 30.6.2005, 19:14
У Z-буфера бываю виды:

D3DFMT_D16
D3DFMT_D15S1
D3DFMT_D24X8
D3DFMT_D24S8
D3DFMT_D24X4S4
D3DFMT_D32


Может ещё есть, но лично я эти виды использую как основные. И пользователям даю право выбрать только из них.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)