![]() |
|
Модераторы: Rickert, Alexeis, BorisVorontsov |
![]()
|
|
| gluk24 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 10.12.2004 Где: Брянск Репутация: нет Всего: нет |
Помогите пожалуйста!!!!!!!!!!!!!!!!!!!!!!!!
Расскажите о алгоритме Z-буфера, Как он работает и какие виды его бывают? plizzz а то меня уже 3 раза препод на этом вопросе запорол по курсачу... |
|||
|
||||
| Xerx |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 28.5.2005 Где: Калуга Репутация: нет Всего: нет |
Создаешь двумерный массив вещ. чисел (еще можно целых чисел, но это w-буфер). Заполняешь его максимальным или минимальным значением (по желанию: если z вперед - минимальным, ...). Пи выводе каждой точки проверяешь ее z-координату со значением в позиции (x, y) на экране. Координаты, конечно, уже экранные. Если z меньше (ось z вперед) - выводишь, иначе нет... Понятно?
|
|||
|
||||
| Shadex |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 23.5.2005 Репутация: 1 Всего: 1 |
Вот теория 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 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 3.6.2005 Где: Первоуральск Репутация: 1 Всего: 1 |
У Z-буфера бываю виды:
D3DFMT_D16 D3DFMT_D15S1 D3DFMT_D24X8 D3DFMT_D24S8 D3DFMT_D24X4S4 D3DFMT_D32 Может ещё есть, но лично я эти виды использую как основные. И пользователям даю право выбрать только из них. |
|||
|
||||
![]()
|
| Вы можете найти полезным что... | |
|
|
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |