а б Рис. 8.39. Задание промежутков с помощью линейной интерполяции Если для вычисления текстурных координат мы применим простую линейную интерполяцию с равномерными шагами по s и по t, то мы «возьмем образцы» текстуры в неверных точках и исказим результирующее изображение. На рис. 8.40 показано, что происходит с обычной шахматной текстурой, отображенной на прямоугольник. На рис. 8.40, а использована линейная интерполяция, что привело к ощутимому искажению текстуры. Такое искажение особенно недопустимо при анимации, когда полигон вращается, поскольку текстура будет перекашиваться и удлиняться при движении. На рис. 8.40, б использована корректная интерполяция, и в результате шахматная доска выглядит как положено. При анимации эта текстура будет выглядеть прочно приклеенной к перемещающейся или вращающейся грани.

В литературе появилось несколько работ, развивающих метод корректной интерполяции. Хекберт и Мортон (Heckbert and Moreton [Heckbert, 105]), а также Блинн [Blinn, 24] приводят элегантную разработку метода, основанного на общей природе аффинного и проективного преобразований. В работе Сегала и других авторов [Segal, 97] тот же результат получен путем алгебраических выкладок, связанных с параметрическим представлением отрезка прямой линии. Здесь применяется последний подход.

Попытаемся проанализировать ситуацию, представленную на рис. 8.41. Мы знаем, что при аффинных и проективных преобразованиях прямолинейность сохраняется, поэтому прямая линия Le из пространства глаза проецируется в прямую Ls в пространстве экрана; аналогичным образом, те тексели, которые нам нужно нарисовать на прямой Ls, лежат на прямой Lt текстурного пространства, которая

8.5. Добавление текстуры к граням отображается в прямую ье. Основной вопрос заключается в следующем: если мы перемещаемся с равномерным шагом вдоль прямой ь$ на экране, то какой шаг будет по текселям вдоль прямой ьс в текстурном пространстве? Ниже делается вывод для общего случая, который показывает действие интерполяции: все дело в эффекте перспективного деления. Затем мы применим этот общий результат к преобразованиям, которые выполняются в графическом конвейере, и четко увидим, откуда нужно брать дополнительные шаги для правильного отображения текстуры.


⇐ Предыдущая| |Следующая ⇒