Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
KGMicro.DOC
Скачиваний:
66
Добавлен:
27.05.2013
Размер:
907.78 Кб
Скачать

15.9. Алгоритмы для криволинейных поверхностей

Рассмотренные выше алгоритмы применимы лишь к объектам, состоящим из плоских граней. Чтобы воспользоваться любым из них для изображения объектов, ограниченных криволинейными поверхностями, необходимо предварительно аппроксимировать эти объекты большим числом мелких граней. Хотя это можно сделать, часто удобнее работать непосредственно с криволинейными поверх­ностями.

Квадратичные поверхности в общем случае являются неплоски­ми и могут быть записаны в аналитическом виде

Если коэффициенты а^—а6 равны нулю, поверхность вырождается в плоскость. Хорошо известными объектами, состоящими из квад­ратичных поверхностей, являются сфера (одна поверхность), за­крытый цилиндр (три поверхности), закрытый конус (две поверхности) и эллипсоид (одна поверхность). В работе [303] рассмотрен полный набор программ для описания и изображения объектов, составленных из квадратичных поверхностей. Объект, изображенный на вклейке 14, составлен из квадратичных поверхностей.

Вейс [496], Вун 1512], Мол [297] и Левин [283] разработали не­сколько алгоритмов, которые позволяют удалять скрытые поверх­ности у объектов, заданных квадратичными поверхностями. В этих алгоритмах определяются пересечения двух квадратичных поверх­ностей, что приводит к уравнению четвертого порядка относительно х, у и г, корни которого находятся численными методами. Левину удалось понизить порядок уравнения до второго путем параметри­зации кривых пересечения.

Со сферами, которые являются частным случаем квадратичных поверхностей, работать легче и, кроме того, они заслуживают особого внимания, поскольку молекулы обычно изображаются в ви­де совокупностей раскрашенных в разные цвета сфер (цветная вклад­ка, 15). Существует ряд алгоритмов, предназначенных для изобра­жения молекул [269, 306, 377, 378, 442].

Более универсальными являются параметрические бикубиче­ские поверхности, рассмотренные в гл. 13, поскольку обладают большей общностью и обеспечивают непрерывность касательной на границах куска. Алгоритм, позволяющий изображать такие по­верхности, впервые предложен Кэтмулом [82]. Разбиение куска (по s и по t) производится до тех пор, пока его проекция на плоскость экрана не станет примерно равной размеру пэла. Определение види­мости такой маленькой области (относительно всех ранее рассмот­ренных кусков) выполняется с помощью алгоритма, использующего z-буфер. Вычисляется закраска этой области, и соответствующее значение помещается в буфер регенерации. Метод Кэтмула не очень быстр, но весьма эффективен. Этот подход оказал значительное влия­ние на выбор направлений дальнейших исследований; примерами могут служить работы [42] и [506].

Блинн и Уиттед разработали два различных алгоритма построч­ного сканирования [46]. Алгоритм Блинна работает непосредствен­но с параметрическим представлением. Для сканирующей строки у=а определяются все значения s и t, удовлетворяющие уравнению

Затем эти значения используются для вычисления x(s, t) и 2(s, t). К сожалению, уравнение (15.9) не решается в общем виде, поэтому его корни определяются численно с помощью метода Ньютона. В ча­стных случаях, когда корни не существуют, алгоритм не работает. В алгоритме Уиттеда также применяются численные методы в сово­купности с аппроксимациями кривой, расположенной в плоскости хг и задаваемой пересечением плоскости у=а с бикубическим ку­ском поверхности.

На сегодняшний день наиболее плодотворным является подход, который основан на адаптивном процессе разбиения бикубических кусков, продолжающемся до тех пор, пока каждый из получаю­щихся в результате деления кусочков не станет достаточно пло­ским. Допустимые отклонения определяются разрешающей способ­ностью дисплея, а также ориентацией подразделяемой области от­носительно картинной плоскости. Поэтому разбиения, в которых нет необходимости, не производятся. После завершения процесса разбиения мелкие многоугольники, задаваемые четырьмя угловыми точками каждого из получившихся в результате деления кусков, обрабатываются при помощи алгоритма построчного сканирования. Тем самым мы получаем возможность одновременно использовать многогранные и бикубические поверхности.

Карпентер и Лэйн [46, 279], а также Кларк, используя этот подход, разработали другие алгоритмы, которые отличаются выбо­ром базовых функций, используемых для получения разностных уравнений (последние описывают разбиение кусков поверхности), а также проверками на «спрямленность». В алгоритме Карпентера и Лейна разбиения производятся только в случае необходимости, т. е. когда обрабатываемая сканирующая строка пересекает кусок поверхности. Тем самым в алгоритме Кларка этот процесс выпол­няется заранее, при проведении предварительной обработки. Пер­вый метод существенно экономнее в отношении памяти, однако, используя второй метод, можно обойтись меньшим числом разбие­ний и, кроме того, гарантировать, что в кусок бикубической поверх­ности в процессе разбиения будут внесены разрывы.

Развивая идеи, высказанные в работах [12, 306], Уиттед пред­ложил изящный и простой (хотя медленный) алгоритм, позволяю­щий обрабатывать полигональные, бикубические, квадратичные и другие куски (гл. 16). С помощью этого алгоритма вычисляется закраска и выводятся на экран прозрачные и полупрозрачные по­верхности.