Sampel (Objek Tekstur HLSL DirectX)

Sampel tekstur.

<Tipe> Templat Object.Sample( sampler_state S, Lokasi float [, int Offset] );

Parameter

Item Deskripsi
Objek
Jenis objek tekstur apa pun (kecuali Texture2DMS dan Texture2DMSArray).
S
[in] Status Sampler. Ini adalah objek yang dideklarasikan dalam file efek yang berisi penetapan status.
Lokasi
[in] Koordinat tekstur. Jenis argumen tergantung pada jenis objek tekstur.
Jenis Texture-Object Jenis Parameter
Texture1D float
Texture1DArray, Texture2D float2
Texture2DArray, Texture3D, TextureCube float3
TextureCubeArray float4

Offset

[in] Offset koordinat tekstur opsional, yang dapat digunakan untuk jenis objek tekstur apa pun; offset diterapkan ke lokasi sebelum pengambilan sampel. Offset tekstur harus statis. Jenis argumen tergantung pada jenis objek tekstur. Untuk informasi selengkapnya, lihat Menerapkan offset koordinat tekstur.

Jenis Texture-Object Jenis Parameter
Texture1D, Texture1DArray int
Texture2D, Texture2DArray int2
Texture3D int3
TextureCube, TextureCubeArray tidak didukung

Menampilkan nilai

Jenis templat tekstur, yang mungkin merupakan vektor tunggal atau multi-komponen. Format didasarkan pada DXGI_FORMAT tekstur.

Minimum Shader Model

Fungsi ini didukung dalam model shader berikut.

vs_4_0 vs_4_1 ps_4_0 ps_4_1 gs_4_0 gs_4_1
x x
  1. TextureCubeArray tersedia dalam Model Shader 4.1 atau yang lebih tinggi.
  2. Shader Model 4.1 tersedia di Direct3D 10.1 atau yang lebih tinggi.

Contoh

Contoh kode parsial ini didasarkan pada file BasicHLSL11.fx dalam Sampel 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;

Keterangan

Pengambilan sampel tekstur menggunakan posisi texel untuk mencari nilai texel. Offset dapat diterapkan ke posisi sebelum pencarian. Status sampler berisi opsi pengambilan sampel dan pemfilteran. Metode ini dapat dipanggil dalam shader piksel, tetapi tidak didukung dalam shader vertex atau shader geometri.

Gunakan offset hanya pada miplevel bilangan bulat; jika tidak, Anda mungkin mendapatkan hasil yang berbeda tergantung pada implementasi perangkat keras atau pengaturan driver.

Menghitung posisi texel

Koordinat tekstur adalah nilai floating-point yang mereferensikan data tekstur, yang juga dikenal sebagai ruang tekstur yang dinormalisasi. Mode pembungkusan alamat diterapkan dalam urutan ini (koordinat tekstur + offset + mode pembungkusan) untuk memodifikasi koordinat tekstur di luar rentang [0...1].

Untuk array tekstur, nilai tambahan dalam parameter lokasi menentukan indeks ke dalam array tekstur. Indeks ini diperlakukan sebagai nilai float berskala (bukan ruang yang dinormalisasi untuk koordinat tekstur standar). Konversi ke indeks bilangan bulat dilakukan dalam urutan berikut (float + round-to-nearest-even integer + clamp ke rentang array).

Menerapkan offset koordinat tekstur

Parameter offset memodifikasi koordinat tekstur, dalam ruang texel. Meskipun koordinat tekstur dinormalisasi angka floating-point, offset menerapkan offset bilangan bulat. Perhatikan juga bahwa offset tekstur harus statis.

Format data yang dikembalikan ditentukan oleh format tekstur. Misalnya, jika sumber daya tekstur ditentukan dengan format DXGI_FORMAT_A8B8G8R8_UNORM_SRGB, operasi pengambilan sampel mengonversi texel sampel dari gamma 2.0 menjadi 1.0, memfilter, dan menulis hasilnya sebagai nilai floating-point dalam rentang [0..1].

Objek Tekstur