5.1.3. Виды текстур
1.
Прозрачные
текстуры
2.
Полупрозрачные
текстуры
3.
Циклические
текстуры
4.
Динамические
текстуры
5.
текстуры
с мультиразрешением
Если необходима прозрачная текстура,
то можно воспользоваться следующим методом:
Зарезервируем один код
Vt под признак прозрачности, то есть эта точка не будет заноситься в
буфер изображения. Нижеприведенный алгоритм отображает обработку одной точки
при использовании прозрачной текстуры:
При применении
полупрозрачной текстуры используется L-буфер, хранящий коэффициенты
прозрачности всех точек текстуры, то есть размет буфера равен размеру текстуры.
Коэффициент прозрачности L = 0…1 , 0 – чисто
прозрачная точка, 1 – непрозрачная точка.
Алгоритм обработки точки полупрозрачной текстуры:
Наложение двух полупрозрачных граней:
Полупрозрачнсть:
H –
обычный буфер
A – a- буфер
V – поле
изображения
HA –
вспомогательный буфер для полупрозрачной грани
VA –
яркость полупрозрачной грани
Pj –
признак обработки j- ой грани (j = [0;m-1], если m граней)
Алгоритм:
Алгоритм обработки грани – сводится к обработке
текущей точки:
Алгоритм учета полупрозрачности - перебор всех точек изображения - для
каждой точки с координатами x,y:
Допустим, что нам необходимо изобразить поверхность
моря. Можно взять большую структуру на
всю поверхность моря, но это очень громоздко и сложно. Вместо этого можно взять
небольшой фрагмент и составить поверхность из нескольких таких фрагментов (т.е.
размножить исходный текстурный фрагмент). При этом необходимо, чтобы
вертикальные стороны были абсолютно одинаковыми.
Как можно показать, что море
волнуется? У нас есть несколько текстур моря, и мы генерируем изображение с
учетом изменения текстур. Т.е. в первом кадре накладывают первую текстуру, в
следующем вторую и т.д. (каждый кадр берёт текстуру из своего файла).
Текстуры с
мультиразрешением
Рассмотрим
текстуру шахматного поля:
Рис 4.4.5.1
При большом удалении мы будем иметь чередование черных и белых точек, и скорее всего нарушится порядок клеток шахматного поля. На самом деле при большом удалении мы должны наблюдать серый фон, следовательно, надо иметь несколько текстур с разным расширением. Все поле видимости делится на несколько областей, которые нумеруются .Для каждой области удаления используется своя текстура – чем ближе она расположена к наблюдателю, тем большее разрешение имеет. Оценив расстояние до объекта, надо использовать либо текстуру для малых удалений, либо – для больших удалений.