В разделе 13.7 «HSR-методы для криволинейных поверхностей» описываются проблемы, связанные с задачей HSR для сцен, состоящих из криволинейных поверхностей, когда аппроксимировать поверхности полиномами нежелательно. Предлагается несколько решений этой задачи. Глава заканчивается несколькими тематическими заданиями, предназначенными для закрепления различных идей изложенных алгоритмов, а также для создания работоспособных программ визуализации, которые корректно удаляют невидимые поверхности.
13.1. Введение Любая программа, претендующая на реалистичную визуализацию трехмерных сцен, должна справляться с задачей удаления невидимых поверхностей (hidden surface-removal - HSR). Большинство объектов на сцене являются непрозрачными, вследствие чего программе не нужно рисовать никакие части объекта, лежащие «позади» непрозрачного объекта с точки зрения камеры. Эта проблема возникает даже в случае единственного объекта на сцене. На рис. 13.1, а показан объект, грани которого закрашены бессистемным образом, то есть каждая грань нарисована просто поверх нарисованных ранее. Результаты неудобопонятны. На рис. 13.1, б показана корректная визуализация: закрашивались только те части каждой грани, которые действительно видны глазу. Здесь следует применить алгоритмы, которые удаляют невидимые части каждой поверхности.

Рис. 13.1. Различная последовательность рисования граней Мы уже рассматривали два подхода к решению задачи HSR. В главе 7 описывался метод «удаления нелицевых граней». Этот метод надежно работает только в случае, когда сцена состоит из единственного объекта, и он может дать сбой, если этот объект невыпуклый. Несмотря на свою простоту и полезность в некоторых ситуациях, метод удаления нелицевых граней не может считаться истинно HSR-методом. В главе 8 нами был разработан весьма работоспособный HSR-метод, основанный на использовании буфера глубины. Этот метод работает в широком диапазоне сцен и очень прост для программирования.
Зачем же беспокоиться о поиске каких-то других методов? Алгоритм для невидимых поверхностей либо работает, либо нет. Это не то, что алгоритмы закрашивания и сглаживания, где один метод спосо-