Bagikan melalui


Pembungkusan Tekstur (Direct3D 9)

Singkatnya, pembungkusan tekstur mengubah cara dasar Direct3D melakukan rasterisasi poligon bertekstur menggunakan koordinat tekstur yang ditentukan untuk setiap puncak. Saat memerkosterisasi poligon, sistem menginterpolasi antara koordinat tekstur di setiap simpul poligon untuk menentukan texel yang harus digunakan untuk setiap piksel poligon. Biasanya, sistem memperlakukan tekstur sebagai bidang 2D, menginterpolasi texel baru dengan mengambil rute terpendek dari titik A dalam tekstur ke titik B. Jika titik A mewakili u, posisi v (0,8, 0,1), dan titik B berada di (0,1,0,1), garis interpolasi terlihat seperti diagram berikut.

diagram garis interpolasi antara dua titik

Perhatikan bahwa jarak terpendek antara A dan B dalam ilustrasi ini berjalan kira-kira melalui tengah tekstur. Mengaktifkan pembungkusan koordinat tekstur u atau v mengubah bagaimana Direct3D melihat rute terpendek antara koordinat tekstur dalam arah u dan arah v. Menurut definisi, pembungkusan tekstur menyebabkan rasterizer mengambil rute terpendek antara set koordinat tekstur, dengan asumsi bahwa 0,0 dan 1,0 bertepatan. Bit terakhir adalah bagian yang rumit: Anda dapat membayangkan bahwa mengaktifkan pembungkusan tekstur ke satu arah menyebabkan sistem memperlakukan tekstur seolah-olah dibungkus di sekitar silinder. Misalnya, pertimbangkan diagram berikut.

diagram tekstur dan dua titik dibungkus di sekitar silinder

Ilustrasi sebelumnya menunjukkan bagaimana pembungkusan di u - arah memengaruhi bagaimana sistem menginterpolasi koordinat tekstur. Menggunakan titik yang sama seperti dalam contoh untuk tekstur normal, atau tidak dibungkus, Anda dapat melihat bahwa rute terpendek antara titik A dan B tidak lagi di tengah tekstur; sekarang melintasi perbatasan di mana 0.0 dan 1.0 ada bersama-sama. Pembungkusan arah v mirip, kecuali membungkus tekstur di sekitar silinder yang terbaring di sisinya. Pembungkusan ke arah u dan arah v lebih kompleks. Dalam situasi ini, Anda dapat membayangkan tekstur sebagai torus, atau donat.

Aplikasi praktis yang paling umum untuk pembungkusan tekstur adalah melakukan pemetaan lingkungan. Biasanya, objek bertekstut dengan peta lingkungan tampak sangat reflektif, menunjukkan gambar cermin dari sekitar objek di adegan. Demi diskusi ini, gambar ruangan dengan empat dinding, masing-masing dicat dengan huruf R, G, B, Y dan warna yang sesuai: merah, hijau, biru, dan kuning. Peta lingkungan untuk ruangan sederhana seperti itu mungkin terlihat seperti ilustrasi berikut.

ilustrasi garis-garis vertikal merah, hijau, biru, dan kuning

Bayangkan langit-langit ruangan dipegang oleh reflektif sempurna, empat sisi, pilar. Memetakan tekstur peta lingkungan ke pilar itu sederhana; membuat tampilan pilar seolah-olah mencerminkan huruf dan warna tidak semampunya. Diagram berikut menunjukkan bingkai kawat pilar dengan koordinat tekstur yang berlaku yang tercantum di dekat puncak teratas. Jahitan tempat pembungkusan akan melintasi tepi tekstur ditampilkan dengan garis putus-putus.

diagram persegi panjang dengan garis putus-putus bisektasi

Dengan pembungkusan diaktifkan di u-direction, pilar bertekstur menunjukkan warna dan simbol dari peta lingkungan dengan tepat dan, pada jahitan di depan tekstur, rasterizer dengan benar memilih rute terpendek antara koordinat tekstur, dengan asumsi bahwa u-koordinat 0,0 dan 1,0 berbagi lokasi yang sama. Pilar bertekstasi terlihat seperti ilustrasi berikut.

ilustrasi pilar yang terdiri dari kuadran merah, hijau, biru, dan kuning

Jika pembungkusan tekstur tidak diaktifkan, rasterizer tidak menginterpolasi ke arah yang diperlukan untuk menghasilkan gambar yang dapat dipercaya dan tercermin. Sebaliknya, area di bagian depan pilar berisi versi texel yang dikompresi secara horizontal antara u-coordinates 0,175 dan 0,875, saat melewati tengah tekstur. Efek bungkusnya hancur.

Menggunakan Pembungkusan Tekstur

Untuk mengaktifkan pembungkusan tekstur, panggil metode IDirect3DDevice9::SetRenderState seperti yang ditunjukkan pada contoh kode di bawah ini.

d3dDevice->SetRenderState(D3DRS_WRAP0, D3DWRAPCOORD_0);

Parameter pertama yang diterima oleh IDirect3DDevice9::SetRenderState adalah status render untuk diatur. Tentukan salah satu D3DRS_WRAP0 melalui nilai enumerasi D3DRS_WRAP7 yang menentukan tingkat tekstur mana yang akan diatur pembungkusannya. Tentukan D3DWRAPCOORD_0 melalui bendera D3DWRAPCOORD_3 dalam parameter kedua untuk mengaktifkan pembungkusan tekstur ke arah yang sesuai, atau gabungkan untuk mengaktifkan pembungkusan dalam beberapa arah. Jika Anda menghilangkan bendera, pembungkusan tekstur ke arah yang sesuai dinonaktifkan. Untuk menonaktifkan pembungkusan tekstur untuk sekumpulan koordinat tekstur, atur nilai untuk status render yang sesuai ke 0.

Jangan membingungkan pembungkus tekstur dengan mode pengalamatan tekstur bernama sama. Pembungkusan tekstur dilakukan sebelum pengalamatan tekstur. Pastikan data pembungkus tekstur tidak berisi koordinat tekstur apa pun di luar rentang [0.0, 1.0] karena ini akan menghasilkan hasil yang tidak ditentukan. Untuk informasi selengkapnya tentang alamat tekstur, lihat Mode Penetapan Alamat Tekstur (Direct3D 9).

Pembungkusan Peta Perpindahan

Peta perpindahan diinterpolasi oleh mesin tesselation. Karena mode pembungkusan tidak dapat ditentukan untuk mesin tessellation, pembungkusan tekstur tidak dapat dilakukan dengan peta perpindahan. Aplikasi dapat menggunakan sekumpulan simpul yang memaksa interpolasi untuk membungkus ke segala arah. Aplikasi ini juga dapat menentukan interpolasi yang akan dilakukan sebagai interpolasi linier sederhana.

Tekstur Direct3D