| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Z-буфер |
| Автор: gluk24 6.1.2005, 19:22 |
| Помогите пожалуйста!!!!!!!!!!!!!!!!!!!!!!!! Расскажите о алгоритме Z-буфера, Как он работает и какие виды его бывают? plizzz а то меня уже 3 раза препод на этом вопросе запорол по курсачу... |
| Автор: Xerx 28.5.2005, 11:40 |
| Создаешь двумерный массив вещ. чисел (еще можно целых чисел, но это w-буфер). Заполняешь его максимальным или минимальным значением (по желанию: если z вперед - минимальным, ...). Пи выводе каждой точки проверяешь ее z-координату со значением в позиции (x, y) на экране. Координаты, конечно, уже экранные. Если z меньше (ось z вперед) - выводишь, иначе нет... Понятно? |
| Автор: 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-буфера обсчет изображений осуществляется программно, через центральный процессор и оперативную память). Надеюсь теперь будет понятней! Дерзай! |
| Автор: Div 30.6.2005, 19:14 |
| У Z-буфера бываю виды: D3DFMT_D16 D3DFMT_D15S1 D3DFMT_D24X8 D3DFMT_D24S8 D3DFMT_D24X4S4 D3DFMT_D32 Может ещё есть, но лично я эти виды использую как основные. И пользователям даю право выбрать только из них. |