Поделиться через


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

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

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

Параметры

Элемент Описание
Объекта
Любой тип объекта текстуры (кроме Texture2DMS и Texture2DMSArray).
S
[in] Состояние выборки. Это объект, объявленный в файле эффекта, который содержит назначения состояний.
Расположение
[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;

Комментарии

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

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

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

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

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

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

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

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

Объект текстуры