Пример (объект текстуры HLSL DirectX)

Примеры текстуры.

<> Тип шаблона Object.Sample( sampler_state S, float Location [, int Offset] );

Параметры

Элемент Описание:
Объекта
Любой тип объекта текстуры (кроме Texture2DMS и Texture2DMSArray).
S
[in] Состояние Sampler. Это объект, объявленный в файле эффектов, который содержит назначения состояний.
Расположение
[in] Координаты текстуры. Тип аргумента зависит от типа объекта текстуры.
Тип Texture-Object Тип параметра
Texture1D FLOAT
Texture1DArray, Texture2D float2
Texture2DArray, Texture3D, TextureCube float3
TextureCubeArray float4

Смещение

[in] Необязательное смещение координат текстуры, которое можно использовать для любого типа объекта текстуры; смещение применяется к расположению перед выборкой. Смещения текстуры должны быть статическими. Тип аргумента зависит от типа объекта текстуры. Дополнительные сведения см. в разделе "Применение смещения координат текстуры".

Тип Texture-Object Тип параметра
Texture1D, Texture1DArray INT
Texture2D, Texture2DArray int2
Texture3D int3
TextureCube, TextureCubeArray не поддерживается

Возвращаемое значение

Тип шаблона текстуры, который может быть вектором с одним или несколькими компонентами. Формат основан на DXGI_FORMAT текстуры.

Минимальная модель шейдера

Эта функция поддерживается в следующих моделях шейдеров.

vs_4_0 vs_4_1 ps_4_0 ps_4_1 gs_4_0 gs_4_1
x x
  1. TextureCubeArray доступен в модели шейдера 4.1 или более поздней версии.
  2. Модель шейдера 4.1 доступна в Direct3D 10.1 или более поздней версии.

Пример

Этот частичный пример кода основан на файле BasicHLSL11.fx в примере BasicHLSL11.

// Object Declarations
Texture2D g_MeshTexture;            // Color texture for mesh

SamplerState MeshTextureSampler
{
    Filter = MIN_MAG_MIP_LINEAR;
    AddressU = Wrap;
    AddressV = Wrap;
};

struct VS_OUTPUT
{
    float4 Position   : SV_POSITION; // vertex position 
    float4 Diffuse    : COLOR0;      // vertex diffuse color (note that COLOR0 is clamped from 0..1)
    float2 TextureUV  : TEXCOORD0;   // vertex texture coords 
};

VS_OUTPUT In;

// Shader body calling the intrinsic function
   ...
        Output.RGBColor = g_MeshTexture.Sample(MeshTextureSampler, In.TextureUV) * In.Diffuse;

Remarks

Выборка текстур использует положение текселя для поиска значения текселя. Смещение можно применить к позиции перед поиском. Состояние sampler содержит параметры выборки и фильтрации. Этот метод можно вызвать в шейдере пикселей, но он не поддерживается в вершинном шейдере или геометрическом шейдере.

Используйте смещение только в целочисленном miplevel; в противном случае результаты могут отличаться в зависимости от конфигурации оборудования или драйвера.

Вычисление позиций текселя

Координаты текстуры — это значения с плавающей запятой, ссылающиеся на данные текстуры, которые также называют нормализованным пространством текстуры. Режимы упаковки адресов применяются в этом порядке (координаты текстуры + смещение и режим переноса) для изменения координат текстуры за пределами диапазона [0...1].

Для массивов текстур дополнительное значение в параметре расположения указывает индекс в массив текстур. Этот индекс рассматривается как масштабируемое значение с плавающей запятой (вместо нормализованного пространства для стандартных координат текстуры). Преобразование в целочисленный индекс выполняется в следующем порядке (число с плавающей запятой + округление до ближайшего целого числа + зажим в диапазон массива).

Применение смещения координат текстуры

Параметр смещения изменяет координаты текстуры в пространстве текселя. Несмотря на то, что координаты текстуры нормализуются числами с плавающей запятой, смещение применяет целочисленное смещение. Также обратите внимание, что смещения текстуры должны быть статическими.

Возвращаемый формат данных определяется форматом текстуры. Например, если ресурс текстуры был определен с DXGI_FORMAT_A8B8G8R8_UNORM_SRGB форматом, операция выборки преобразует образцы текселей из гамма-2.0 в 1,0, фильтрует и записывает результат в виде значения с плавающей запятой в диапазоне [0..1].

Объект Texture-Object