Bagikan melalui


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.

Referensi Anotasi dan Semantik Standar DirectX