Pengikatan Data
Gunakan Koleksi SasHostParameterValue untuk menentukan kumpulan nilai aplikasi host, serta jenis dan anggotanya, yang diekspos ke efek. Gunakan anotasi SasBindAddress dalam file efek untuk mengaitkan parameter efek dengan parameter yang sesuai dalam aplikasi host.
Koleksi SasHostParameterValue
SasHostParameterValue didefinisikan menggunakan sintaks file efek (.fx). Meskipun sintaksnya sangat mirip dengan sintaks file efek, ada beberapa perbedaan. Misalnya, jenis objek, seperti texture2d, sampler, dan string, tidak valid dalam file efek aktual, tetapi valid di SasHostParameterValue. Aplikasi host dapat mengimplementasikan SasHostParameterValue dengan cara apa pun selama sesuai dengan deskripsi di bawah ini; definisi aktual terletak di efek standar DXSAS termasuk file ([SDK Root]/Utilities/Source/Sas/Sas.fxh).
Perhatikan bahwa array di SasHostParameterValue seperti Lampu atau Kamera memiliki panjang yang tidak terbatas. Ini berarti bahwa efek dapat mengikat indeks arbitrer dalam array dan aplikasi host tersebut harus memberikan default yang bermakna dalam kasus di mana tidak ada nilai aplikasi yang dapat disediakan.
Beberapa jenis dan konstanta harus didefinisikan dalam standar DXSAS termasuk, seperti yang disebutkan dalam definisi standar termasuk. Ini memungkinkan efek untuk dengan mudah mengikat nilai agregat dari SasHostParameterValue ke parameter efek terstruktur.
Koleksi SasHostParameterValue | Jenis | Anggota |
---|---|---|
Waktu | float | Sas.Time.Now |
float | Sas.Time.Last | |
int | Sas.Time.FrameNumber | |
Peta Lingkungan | textureCUBE | Sas.EnvironmentMap |
Kamera | SasCamera | Sas.Camera |
float4x4 | Sas.Camera.WorldToView | |
float4x4 | Sas.Camera.Projection | |
float2 | Sas.Camera.NearFarClipping | |
Terang | SasAmbientLight | AmbientLight[ZeroOrMore]; |
int | Sas.NumAmbientLights | |
SasAmbientLight | DirectionalLight[ZeroOrMore]; | |
int | Sas.NumDirectionalLights | |
SasAmbientLight | PointLight[ZeroOrMore]; | |
int | Sas.NumPointLights | |
SasAmbientLight | SpotLight[ZeroOrMore]; | |
int | Sas.NumSpotLights | |
Bayangan | float4x4 | Sas.Shadow[ZeroOrMore]. WorldToShadow |
texture2D | Sas.Shadow[ZeroOrMore]. Peta Bayangan | |
Kerangka | float4x4 | Sas.Skeleton.MeshToJointToWorld[OneOrMore] |
int | Sas.Skeleton.NumJoints |
Waktu
Jam virtual atau nilai waktu aplikasi host. Anggota meliputi:
- Sas.Time.Now - nilai jam virtual aplikasi host pada titik di mana efek akan dirender.
- Sas.Time.Last - nilai Sekarang pada render sebelumnya.
- Sas.Time.FrameNumber - nilai penghitung yang bertahap sekali per bingkai yang dirender.
Efek harus menangani fakta bahwa nilai-nilai anggota ini berpotensi membungkus selama waktu eksekusi yang sangat lama. Sekarang dan Terakhir mungkin memiliki nilai yang sangat besar.
Peta Lingkungan
Peta lingkungan kubik. Aplikasi host harus menyediakan tekstur kubus yang valid jika efek mencoba mengikat Sas.EnvironmentMap.
Kamera
Kamera saat ini sedang dirender. Anggota meliputi:
- Sas.Camera.WorldToView - matriks tampilan dunia komposit untuk kamera.
- Sas.Camera.Projection - matriks proyeksi untuk kamera.
- Sas.Camera.NearFarClipping - nilai bidang kliping dekat dan jauh.
Terang
Satu atau beberapa lampu adegan. Kumpulan lampu dinyatakan sebagai array di mana:
- Warna - warna RGB. Nilai defaultnya adalah (0,0,0).
- Arah - arah cahaya. Nilai defaultnya adalah (0,0,0).
- Rentang - jarak dari cahaya di mana sinar cahaya tidak berpengaruh pada tempat kejadian. Nilai default adalah 0.
- Theta - sudut kerumuman dalam sorotan, diukur dalam radian. Nilai default adalah 0.
- Phi - sudut kerujuk luar sorotan, diukur dalam radian. Nilai default adalah 0.
Jumlah lampu harus diatur ke jumlah lampu yang terikat ke array terkait. Efek dapat memilih untuk mengabaikan jumlah lampu dan mengikat ke elemen apa pun dari salah satu array cahaya. Oleh karena itu, aplikasi host harus menyediakan pengikatan yang valid untuk elemen di luar jumlah lampu dalam array.
ZeroOrMore menyiratkan bahwa array mungkin memiliki sejumlah elemen.
Bayangan
Buffer bayangan yang terdiri dari:
- WorldToShadow - array matriks.
- ShadowMap - file tekstur 2D.
ZeroOrMore menyiratkan bahwa array mungkin memiliki sejumlah elemen (nol berarti array kosong).
Efek akan mendeklarasikan sampler sebagai berikut:
texture2D Shadow
<
string SasBindAddress = "Sas.Shadow[0].ShadowMap";
>;
sampler ShadowSampler = shadow_sampler(Shadow);
Kerangka
Kumpulan bingkai yang menyusun objek penyajian saat ini. Contoh bingkai adalah tulang dan transformasi. Ini termasuk:
- MeshToJointToWorld - array matriks.
- NumJoints - jumlah sendi dalam kerangka.
OneOrMore menyiratkan bahwa array memiliki setidaknya satu dan mungkin berisi sejumlah elemen.
Definisi ini mendukung objek jala yang kaku dan berkulit menggunakan set nilai SasHostParameterValue Collection yang sama dengan interpretasi yang berbeda.
SasBindAddress
Anotasi ini ditambahkan ke bagian atas file efek untuk mengaitkan parameter efek dengan parameter terkait yang ditentukan dalam Koleksi SasHostParameterValue. Anotasi dinyatakan seperti ini:
string SasBindAddress = "SasHostParameterValue";
Contoh ini mengikat matriks dunia efek ke matriks MeshToJointToWorld:
float4x3 World
<
string SasBindAddress = "Sas.Skeleton.MeshToJointToWorld[0]";
>;
Anotasi ini memberi tahu aplikasi host bahwa ia perlu mengatur nilai matriks dunia efek menggunakan data dalam matriks MeshToJointToWorld.
Sintaks anotasi alamat ikatan didefinisikan sangat mirip dengan sintaks yang digunakan oleh ID3DXEffect untuk mendapatkan dan mengatur parameter efek. Satu-satunya perbedaan antara metode tata bahasa DXSAS dan ID3DXEffect adalah penambahan token indeks tanda bintang. Berikut adalah contoh lain menggunakan indeks tanda bintang:
float3 LightColors[6]
<
string SasBindAddress = "Sas.Light[*].Color";
>;
Token indeks tanda bintang menunjukkan bahwa semua elemen array nilai envirnmant host tertentu (warna dalam hal ini) harus terikat dalam parameter terkait. Beberapa token indeks tanda bintang memungkinkan efek untuk mengikat sub-elemen dari array struktur tanpa perlu mengikat seluruh struktur itu sendiri. Contoh ini mengikat nilai warna dari enam lampu pertama ke parameter efek.
Topik terkait