Bagikan melalui


texcoord - ps

Menginterpretasikan data koordinat tekstur (UVW1) sebagai data warna (RGBA).

Sintaks

texcoord dst

 

Di mana

  • dst adalah register tujuan.

Keterangan

Versi shader piksel 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
texcoord x x x

 

Instruksi ini menginterpretasikan kumpulan koordinat tekstur (UVW1) yang sesuai dengan nomor register tujuan sebagai data warna (RGBA). Jika kumpulan koordinat tekstur berisi kurang dari tiga komponen, komponen yang hilang diatur ke 0. Komponen keempat selalu diatur ke 1. Semua nilai dijepit antara 0 dan 1.

Keuntungan dari texcoord adalah menyediakan cara untuk meneruskan data vertex yang diinterpolasi dengan presisi tinggi langsung ke shader piksel. Namun, ketika data ditulis ke dalam register tujuan, beberapa presisi akan hilang, tergantung pada jumlah bit yang digunakan oleh perangkat keras untuk mendaftar.

Tidak ada tekstur yang diambil sampelnya oleh instruksi ini. Hanya koordinat tekstur yang diatur pada tahap tekstur ini yang relevan.

Data tekstur apa pun (seperti posisi, normal, dan arah sumber cahaya) dapat dipetakan oleh shader puncak ke dalam koordinat tekstur. Ini dilakukan dengan mengaitkan tekstur dengan register tekstur menggunakan SetTexture dan dengan menentukan bagaimana pengambilan sampel tekstur dilakukan menggunakan SetTextureStageState. Jika alur fungsi tetap digunakan, pastikan untuk menyediakan bendera TSS_TEXCOORDINDEX.

Instruksi ini digunakan sebagai berikut:

texcoord tn

Register Koordinat Tekstur (tn) berisi empat nilai warna (RGBA). Data juga dapat dianggap sebagai data vektor (xyzw). texcoord akan mengambil tiga nilai ini (xyz) dari kumpulan koordinat tekstur x, dan komponen keempat (w) diatur ke 1. Alamat tekstur disalin dari kumpulan koordinat tekstur n. Hasilnya dijepit antara 0 dan 1.

Contoh ini hanya untuk ilustrasi. Kode C yang menyertai shader belum dioptimalkan untuk performa.

Berikut adalah contoh shader menggunakan texcoord.

ps_1_1        ; version instruction
texcoord t0   ; declare t0 hold texture coordinates, 
              ; which represent rgba values in this example
mov r0, t0    ; move the color in t0 to output register r0

Output yang dirender dari shader piksel ditampilkan dalam ilustrasi berikut. Peta nilai koordinat (u,v,w,1) ke saluran (rgb). Saluran alfa diatur ke 1. Di sudut ilustrasi, koordinat (0,0,0,1) ditafsirkan sebagai hitam; (1,0,0,1) berwarna merah; (0,1,0,1) berwarna hijau; dan (1,1,0,1) mengandung hijau dan merah, menghasilkan warna kuning.

ilustrasi output yang dirender dari contoh shader piksel

Kode tambahan diperlukan untuk menggunakan shader ini dan contoh skenario ditunjukkan di bawah ini.

// This code creates the shader from a file. The contents of  
// the shader file can also be supplied as a text string.
LPD3DXBUFFER        pCode;

// Assemble the vertex shader from the file
D3DXAssembleShaderFromFile(strPShaderPath, 0, NULL, &pCode, NULL);
m_pd3dDevice->CreatePixelShader((DWORD*)pCode->GetBufferPointer(),
                   &m_hPixelShader);
pCode->Release();

// This code defines the object vertex data
struct CUSTOMVERTEX
{
    FLOAT x, y, z;
    FLOAT tu1, tv1;
};

#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_TEX1|TEXCOORD2(0))

static CUSTOMVERTEX g_Vertices[]=
{
    //  x      y     z     u1    v1   
    { -1.0f, -1.0f, 0.0f, 0.0f, 0.0f, },
    { +1.0f, -1.0f, 0.0f, 1.0f, 0.0f, },
    { +1.0f, +1.0f, 0.0f, 1.0f, 1.0f, },
    { -1.0f, +1.0f, 0.0f, 0.0f, 1.0f, },
};

Instruksi Pixel Shader