Powered by SerDer

Rambler's Top100 Service
Aport Top 1000
TopList
be number one

         

Удаление невидимых поверхностей

Получение списка многогранников - предварительная стадия в процессе удаления невидимых поверхностей. Программа моделирования твердого тела обходит список двухмерных многогранников, обрабатывая каждый пиксел соответствующего изображения. Если Z-значение пиксела больше соответствующего Z-значения, то он находится за существующим пикселом (относительно человека, сидящего за дисплеем) и, следовательно, не отображается. Если же его Z-значение сигнализирует о том , что пиксел находится перед существующим, он отображается. В результате цвет пиксела устанавливается в соответствии с только что оцененным пикселом, а новое Z-значение начинает отражать новую глубину. При этом обьекты на экране появляются в том порядке, в котором программа воспроизведения изображения обрабатывает список. В итоге появляется изображение, визуально совпадающее с оригиналом.
Сколько дополнительной экранной памяти нам понадобится, чтобы должным образом представить все значения глубины? Восемь бит для одного пиксела в Z-буфере дает 256 значений глубины. Для простых моделей этого будет достаточно. Непрактично представлять каждое возможное значение глубины. Сначала необходимо установить диапазон Z-значений для данного объекта . Если обрабатываемый трехмерный объект имеет, например, площадь около 5 сантиметров, то безопасный диапазон глубины равен 10 сантиметрам. Восемь бит Z-буфера позволяют разбить этот диапазон на 256 значений, то есть получить приращение глубины около трети миллиметра. Ошибки округления могут привести к неправильному отображению нескольких пикселов, но в основном представление будет очень точным.
Современные развитые графические рабочие станции предагают значительно большие буфера - до 32 бит , позволяющие нам эффективно использовать более 4 биллионов различных градаций глубины. В некоторых случаях необходима и такая точность.
Общее заблуждение состоит в том , что модель большего объема, требует больший Z-буфер. Это не всегда справедливо, особенно если все элементы выполнены в больших масштабах. Проблемы возникают, когда нужно работать с моделями, имеющими как большие, так и очень малые значения глубины.
Рассмотрим модель, состоящую из двух мелких объектов, соединенных 50-метровым цилиндром. Допустим, что необходима точность глубины по крайней мере в полмиллиметра, чтобы точно отобразить мелкие объекты. Тогда нужно разделить расстояние в 50 метров на это приращение, что даст более 100 тысяч различных Z-значений, или, по крайней мере, 17-битовый Z-буфер. Если вы рассматриваете некоторые современные модели (например , космические станции, компоненты которых варьируются от маленьких болтиков до громадных солнечных батарей) , важность точности глубины существенно возрастает. К счастью, вам не обязательно дважды тратить память на такую громоздкую Z-буферизацию, если вы используете двойную буферизацию образа. Как только изображение нарисовано в одном из буферов, память Z-буфера можно использовать для вторичного буфера.
Пример реализации содержится в проекте 3D Animator.

[Назад]

Почта
Помощь студенту-информатику

Reklama