Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Perangkat Direct3D dapat mengubah koordinat tekstur untuk simpul dengan menerapkan matriks 4x4. Sistem menerapkan transformasi ke koordinat tekstur dengan cara yang sama seperti geometri. Setiap transformasi (skala, rotasi, terjemahan, proyeksi, shear, atau kombinasi apa pun) dapat dilakukan dengan matriks 4x4.
Nota
Direct3D tidak mengubah simpul yang diubah dan dinyalakan. Akibatnya, aplikasi yang menggunakan simpul yang diubah dan menyala tidak dapat menggunakan Direct3D untuk mengubah koordinat tekstur simpul.
Perangkat yang mendukung transformasi dan operasi pencahayaan yang dipercepat perangkat keras (Perangkat HAL T&L) juga mempercepat transformasi koordinat tekstur. Saat akselerasi transformasi perangkat keras tidak tersedia, pengoptimalan khusus platform dalam alur geometri Direct3D berlaku untuk transformasi koordinat tekstur.
Transformasi koordinat tekstur berguna untuk menghasilkan efek khusus sambil menghindari kebutuhan untuk memodifikasi koordinat tekstur geometri Anda secara langsung. Anda dapat menggunakan matriks terjemahan atau rotasi sederhana untuk menganimasikan tekstur pada objek, atau Anda dapat mengubah koordinat tekstur yang secara otomatis dihasilkan oleh Direct3D untuk menyederhanakan dan mungkin mempercepat efek lanjutan seperti tekstur yang diproyeksikan dan pemetaan cahaya dinamis. Selain itu, Anda dapat menggunakan transformasi koordinat tekstur untuk menggunakan kembali satu set koordinat tekstur untuk beberapa tujuan, dalam beberapa tahap tekstur.
Mengatur dan Mengambil Transformasi Koordinat Tekstur
Seperti matriks yang digunakan aplikasi Anda untuk geometri, Anda mengatur dan mengambil transformasi koordinat tekstur dengan memanggil metode IDirect3DDevice9::SetTransform dan IDirect3DDevice9::GetTransform. Metode ini menerima D3DTS_TEXTURE0 melalui anggota D3DTS_TEXTURE7 dari jenis enumerasi D3DTRANSFORMSTATETYPE untuk mengidentifikasi matriks transformasi untuk tahap tekstur 0 hingga 7, masing-masing.
Kode berikut mengatur matriks untuk diterapkan ke koordinat tekstur untuk tekstur tahap 0.
// For this example, assume the d3dDevice variable contains a
// valid pointer to an IDirect3DDevice9 interface.
D3DMATRIX matTrans = D3DXMatrixIdentity( NULL );
// Set up the matrix for the desired transformation.
d3dDevice->SetTransform( D3DTS_TEXTURE0, &matTrans );
Mengaktifkan Transformasi Koordinat Tekstur
Status tahap tekstur D3DTSS_TEXTURETRANSFORMFLAGS mengontrol penerapan transformasi koordinat tekstur. Nilai untuk status tahap tekstur ini ditentukan oleh jenis enumerasi D3DTEXTURETRANSFORMFLAGS.
Transformasi koordinat tekstur dinonaktifkan saat D3DTSS_TEXTURETRANSFORMFLAGS diatur ke D3DTTFF_DISABLE (nilai default). Dengan asumsi bahwa transformasi koordinat tekstur diaktifkan untuk tahap 0, kode berikut menonaktifkannya.
// For this example, assume the d3dDevice variable contains a
// valid pointer to an IDirect3DDevice9 interface.
d3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS,
D3DTTFF_DISABLE );
Nilai lain yang ditentukan dalam D3DTEXTURETRANSFORMFLAGS digunakan untuk mengaktifkan transformasi koordinat tekstur, dan untuk mengontrol berapa banyak elemen koordinat tekstur yang dihasilkan diteruskan ke rasterizer. Misalnya, ambil kode berikut.
// For this example, assume the d3dDevice variable contains a
// valid pointer to an IDirect3DDevice9 interface.
d3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS,
D3DTTFF_COUNT2 );
Nilai D3DTTFF_COUNT2 menginstruksikan sistem untuk menerapkan matriks transformasi yang ditetapkan untuk tekstur tahap 0, lalu meneruskan dua elemen pertama dari koordinat tekstur yang dimodifikasi ke rasterizer.
Bendera transformasi tekstur D3DTTFF_PROJECTED menunjukkan koordinat untuk tekstur yang diproyeksikan. Ketika bendera ini ditentukan, rasterizer membagi elemen yang diteruskan oleh elemen terakhir. Ambil kode berikut, misalnya.
// For this example, assume the d3dDevice variable contains a
// valid pointer to an IDirect3DDevice9 interface.
d3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS,
D3DTTFF_COUNT3 | D3DTTFF_PROJECTED );
Contoh ini menginformasikan sistem untuk meneruskan tiga elemen koordinat tekstur ke rasterizer. Rasterizer membagi dua elemen pertama dengan yang ketiga, menghasilkan koordinat tekstur 2D yang diperlukan untuk mengatasi tekstur.
Topik terkait