Главная » Статьи » Учебник: теория

Текстурирование. Часть2.
<<Часть.1, Часть.3>>

Режимы наложения текстур (Wrap Modes)


(u,v) координаты текстур назначенные вершинам определяют как текстура будет накоадываться на геометрию. Обычно вы будете использовать координаты в промежутке [0,1], который представляет собой все пиксели вашей картинки. Однако, можно так же использовать координаты текстур выходящие за этот промежуток и даже отрицательные значения.

Итак что будет происходить с текстурой если мы выйдем за промежуток [0,1], за картинку? Вы можете задать это с помощью режимов наложения текстур.

Code
texture.setWrapU(wrapMode)
texture.setWrapV(wrapMode)

Параметр wrapMode определяется отдельно для направлений u и v (есть также setWrapW() для 3-D текстур). Параметр wrapMode может принимать следующие значения:


Texture.WMRepeat Картинка текстуры повторяется до бесконечности.
Texture.WMClamp Последний (крайний) пиксель картинки текстуры растягивается до бесконечности.
Texture.WMBorderColor Цвет определенный с помощью texture.setBorderColor() заполнить пустое пространство.
Texture.WMMirror Картинка текстуры зеркально отражается туда обратно до бесконечности.
Texture.WMMirrorOnce Картинка отражается один раз, а потом используется BorderColor.

Режимы наложения по умолчанию - WMRepeat.

Возмем следующую простую картинку для примера:

Поместим эту текстуру в центр большого полигона с координатами текстуры выходящими за [0,1] в обоих направлениях.

WMRepeat

Code
texture.setWrapU(Texture.WMRepeat)
texture.setWrapV(Texture.WMRepeat)

Режим WMRepeat часто используется, чтобы затайлить (закрасить) большую поверхность маленькой текстурой.

WMClamp

Code
texture.setWrapU(Texture.WMClamp)
texture.setWrapV(Texture.WMClamp)

Режим WMClamp редко используется на больших полигонах, потому что, честно говоря, выглядит это ужасно. Но этот режим обычно хороший выбор когда текстура четко заполняет полигон (см. предупреждение об ошибке при использовании обычного режима наложения внизу статьи).

WMBorderColor

Code
texture.setWrapU(Texture.WMBorderColor)
texture.setWrapV(Texture.WMBorderColor)
texture.setBorderColor(VBase4(0.4, 0.5, 1, 1))

Синий цвет был выбран с целью иллюстрации. Вы можете использовать любой цвет. Обычно используют фоновый цвет текстуры:

Code
texture.setWrapU(Texture.WMBorderColor)
texture.setWrapV(Texture.WMBorderColor)
texture.setBorderColor(VBase4(1, 1, 1, 1))

Некоторые очень старые графические драйвера не поддерживают WMBorderColor. В таких случаях Panda3D будет использовать WMClamp, который даст тот же эффект если по краю картинки будет рамка одного нужного нам цвета.

WMMirror

Code
texture.setWrapU(Texture.WMMirror)
texture.setWrapV(Texture.WMMirror)

Many older graphics drivers do not support WMMirror. In this case, Panda3D will fall back to WMRepeat.
Многие старые графические драйвера не поддерживают WMMirror. В таком случае Panda3D будет использовать WMRepeat.

WMMirrorOnce

Code
texture.setWrapU(Texture.WMMirrorOnce)
texture.setWrapV(Texture.WMMirrorOnce)
texture.setBorderColor(VBase4(0.4, 0.5, 1, 1))

Некоторые графические драйвера не поддерживают WMMirrorOnce. В таком случае Panda3D будет использовать WMBorderColor.

Установка различных режимов наложения

Есть возможность установить разные режимы наложения текстур для направлений u и v:

Code
texture.setWrapU(Texture.WMRepeat)
texture.setWrapV(Texture.WMClamp)

Предупреждение об ошибке при использовании обычного режима наложения

Когда вы накладываете текстуру, которая должна четко заполнять полигон, т.е. ее координаты четко входят в промежуток [0,1] и не больше, вам обычно стоит использовать режим WMClamp. Если этого не сделать и использовать WMRepeat по умолчанию, то по краю может проявиться кусок от противоположного края картинки и получится тонкая полоска. Пример:


Категория: Учебник: теория | Добавил: ILIUS (13.03.2009)
Просмотров: 5486 | Комментарии: 8 | Рейтинг: 0.0/0
Всего комментариев: 8
1 ILIUS  
1
А подправить как-то можно? А то лишние проблелы между строк и там не подтер я на английском строчку (кусками переводил и стирал). Просто делал все это в блокноте, он видимо глюк дал с переносами строк..

2 BlackCat  
0
коордИнаты

3 ILIUS  
0
пардон по русскому 3 всегда имел) то же не помешало бы подправить)

4 ninth  
0
Просто нужно было галочку убрать "заменять переносы тегами </br>"
Ты сам можешь редактировать свои материалы

5 ILIUS  
0
убейте меня не нашел как отредактировать статью) wacko

6 ninth  
0
Напротив заголовка статьи должна быть стрелочка(треугольничек), открывающий выпадающее меню

7 ILIUS  
0
нету

8 ILIUS  
0
Появилась стрелочка поправил таки biggrin

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Онлайн всего: 1
Гостей: 1
Пользователей: 0