Режимы адресации текстур (Direct3D 9)
Приложение Direct3D может назначать координаты текстур любой вершине любого примитива. Для получения подробной информации см. координаты текстуры (Direct3D 9). Как правило, координаты u-и v-текстуры, назначенные вершине, находятся в диапазоне от 0,0 до 1,0 включительно. Однако, назначив координаты текстуры за пределами этого диапазона, можно создать определенные специальные эффекты текстуры.
Вы управляете тем, что Direct3D делает с координатами текстур, которые находятся за пределами диапазона [0.0, 1.0], задав режим адресации текстур. Например, приложение может задать режим адресации текстур, чтобы текстура была фрагментирована по примитиву.
Direct3D позволяет приложениям выполнять оболочку текстур. Важно отметить, что настройка режима адресации текстуры D3DTADDRESS_WRAP не совпадает с выполнением пакетирования текстур. Установка режима адресации текстуры на D3DTADDRESS_WRAP приводит к тому, что несколько копий исходной текстуры применяются к текущему примитиву. Включение упаковки текстур изменяет способ растеризации текстурированных многоугольников системой. Дополнительные сведения см. в оборачивание текстур (Direct3D 9).
Включение упаковки текстур фактически делает координаты текстур за пределами диапазона [0.0, 1.0] недействительными, и поведение при растеризации таких нарушающих координат текстур в этом случае не определено. При включении упаковки текстур режимы адресации текстур не используются. Убедитесь, что приложение не указывает координаты текстур ниже 0,0 или выше 1.0 при включении упаковки текстур.
Настройка режима адресации
Вы можете задать режимы адресации текстур для отдельных этапов текстур, вызвав метод IDirect3Device9::SetSamplerState. Укажите требуемый идентификатор этапа текстуры в параметре Sampler. Задайте параметру Type значение D3DSAMP_ADDRESSU, D3DSAMP_ADDRESSV или D3DSAMP_ADDRESSW для обновления режимов u-, v или w-адресации по отдельности. Значение параметра определяет, какой режим устанавливается. Это может быть любой элемент перечисленного типа D3DTEXTUREADDRESS. Чтобы получить текущий режим адресации текстуры для этапа текстуры, вызовите IDirect3DDevice9::GetSamplerState, используя члены D3DSAMP_ADDRESSU, D3DSAMP_ADDRESSV или D3DSAMP_ADDRESSW перечисления D3DSAMPLERSTATETYPE для определения нужного режима адресации.
Ограничения устройств
Хотя система обычно разрешает использование координат текстур за пределами диапазона от 0.0 до 1.0 включительно, ограничения оборудования часто влияют на то, насколько далеко за этот диапазон могут выходить координаты текстур. Устройство отрисовки указывает это ограничение в MaxTextureRepeat члене структуры D3DCAPS9 при получении характеристик устройства. Значение в этом элементе описывает полный диапазон координат текстур, разрешенных устройством. Например, если это значение равно 128, координаты входной текстуры должны храниться в диапазоне -128.0 до +128.0. Передача вершин с координатами текстуры вне этого диапазона недействительна. Это же ограничение применяется к координатам текстуры, созданным в результате автоматического создания координат текстуры и преобразований координат текстуры.
На интерпретацию MaxTextureRepeat также влияет бит возможностей D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE. Если этот бит задан, значение в элементе MaxTextureRepeat используется точно так же, как описано. Однако если D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE не установлено, ограничения повторяющихся текстур зависят от размера текстуры, индексируемой координатами текстуры. В этом случае MaxTextureRepeat необходимо масштабировать по текущему размеру текстуры на самом большом уровне детализации для вычисления допустимого диапазона координат текстуры. Например, учитывая измерение текстуры 32 и MaxTextureRepeat 512, фактический допустимый диапазон координат текстуры равен 512/32 = 16, поэтому координаты текстуры для этого устройства должны находиться в диапазоне от -16,0 до +16.0.
Дополнительные сведения о режимах адресации текстур содержатся в следующих разделах.
- режим переноса адресов текстуры (Direct3D 9)
- режим зеркальной адресации текстуры (Direct3D 9)
- режим ограничения адресации текстуры (Direct3D 9)
- режим адресации текстуры цвета границы (Direct3D 9)
Связанные разделы