Udostępnij za pośrednictwem


Łączenie danych

Użyj SasHostParameterValue Collection, aby zdefiniować kolekcję wartości aplikacji hosta, a także ich typ i składowe, narażone na efekty. Użyj adnotacji SasBindAddress w pliku efektów, aby skojarzyć parametr efektu z odpowiednim parametrem w aplikacji hosta.

Kolekcja SasHostParameterValue

Parametr SasHostParameterValue jest definiowany przy użyciu składni pliku efektów (.fx). Chociaż składnia jest bardzo podobna do składni pliku efektu, istnieją pewne różnice. Na przykład typy obiektów, takie jak texture2d, samplers i strings, nie są prawidłowe w rzeczywistych plikach efektu, ale są prawidłowe w sasHostParameterValue. Aplikacja hosta może zaimplementować wartość SasHostParameterValue w dowolny sposób, o ile jest zgodna z poniższym opisem; rzeczywista definicja znajduje się w pliku dołączania standardowego efektu DXSAS ([SDK Root]/Utilities/Source/Sas/Sas.fxh).

Należy pamiętać, że tablice, takie jak "światła" lub "kamery" w parametrze SasHostParameterValue, mają nieokreśloną długość. Oznacza to, że efekty mogą wiązać się z dowolnym indeksem w tych tablicach, a aplikacje hosta muszą zapewniać sensowne wartości domyślne w przypadkach, gdy nie można podać wartości aplikacji.

Niektóre typy i stałe są wymagane do zdefiniowania w standardzie DXSAS, jak wspomniano w definicji standardu include. Umożliwia to efektom łatwe powiązanie zagregowanych wartości z SasHostParameterValue ze strukturalnymi parametrami efektów.

Kolekcja SasHostParameterValue Typ Członek
czasu unosić się Sas.Time.Now
pływać Sas.Time.Last
Int Sas.Time.FrameNumber
mapy środowiska textureCUBE Sas.MapaŚrodowiskowa
aparat SasCamera Sas.Camera
float4x4 Sas.Camera.WorldToView
float4x4 Sas.Camera.Projection
float2 Sas.Camera.NearFarClipping
Jasny SasAmbientLight AmbientLight[ZeroOrMore];
Int Sas.NumAmbientLights
SasAmbientLight DirectionalLight[ZeroOrMore];
Int Sas.NumDirectionalLights
SasAmbientLight PointLight[ZeroOrMore];
Int Sas.NumPointLights
SasAmbientLight SpotLight[ZeroOrMore];
Int Sas.NumSpotLights
Cień float4x4 Sas.Shadow[ZeroOrMore]. WorldToShadow
texture2D Sas.Shadow[ZeroOrMore].ShadowMap
szkielet float4x4 Sas.Skeleton.MeshToJointToWorld[OneOrMore]
Int Sas.Skeleton.NumJoints

 

Czas

Wartość zegara wirtualnego lub godziny aplikacji hosta. Członkowie to:

  • Sas.Time.Now — wartość zegara wirtualnego aplikacji hosta w momencie renderowania efektu.
  • Sas.Time.Last — wartość Teraz w poprzednim renderze.
  • Sas.Time.FrameNumber — wartość licznika, która jest zwiększana raz na renderowaną ramkę.

Efekty muszą odpowiednio obsługiwać możliwość, że wartości tych zmiennych mogą przekroczyć wartość maksymalną i rozpocząć od minimalnej podczas bardzo długich okresów wykonywania. Teraz i Ostatni mogą mieć bardzo duże wartości.

Mapa środowiska

Mapa środowiska sześciennego. Aplikacje hosta muszą podać prawidłową teksturę sześcienną, jeśli efekt próbuje się połączyć z Sas.EnvironmentMap.

Kamera

Kamera jest obecnie renderowana. Członkowie to:

  • Sas.Camera.WorldToView — złożona macierz widoku świata dla aparatu.
  • Sas.Camera.Projection — macierz projekcji kamery.
  • Sas.Camera.NearFarClipping — wartości bliskich i dalekich płaszczyzn przycinania.

Światło

Jedno lub więcej świateł sceny. Kolekcja świateł jest deklarowana jako tablica, w której:

  • Kolor — kolor RGB. Wartość domyślna to (0,0,0).
  • Kierunek — kierunek światła. Wartość domyślna to (0,0,0).
  • Zakres - odległość od światła, w którym promienie światła nie mają wpływu na scenę. Wartość domyślna to 0.
  • Theta - wewnętrzny kąt stożka reflektora, mierzony w radianach. Wartość domyślna to 0.
  • Phi - zewnętrzny kąt stożka reflektora, mierzony w radianach. Wartość domyślna to 0.

Liczba świateł musi być ustawiona na liczbę świateł powiązanych z skojarzoną tablicą. Efekty mogą ignorować liczbę świateł i wiązać się z dowolnym elementem jednej z tablic świetlnych. W związku z tym aplikacje hosta muszą zapewnić prawidłowe powiązanie elementów poza liczbą świateł w tablicy.

ZeroOrMore oznacza, że tablica może mieć dowolną liczbę elementów.

Cień

Bufory cieni, które składają się z:

  • WorldToShadow — tablica macierzy.
  • ShadowMap — plik tekstury 2D.

ZeroOrMore oznacza, że tablica może mieć dowolną liczbę elementów (zero oznacza pustą tablicę).

Efekt deklaruje próbkator w następujący sposób:

texture2D Shadow 
<
  string SasBindAddress = "Sas.Shadow[0].ShadowMap";
>;

sampler ShadowSampler = shadow_sampler(Shadow);

Szkielet

Zestaw ramek tworzących aktualnie renderujący obiekt. Przykłady ramek to kości i przekształcenia. Obejmuje to:

  • MeshToJointToWorld — tablica macierzy.
  • NumJoints - liczba stawów w szkieletie.

OneOrMore oznacza, że tablica ma co najmniej jedną i może zawierać dowolną liczbę elementów.

Definicja obsługuje zarówno sztywne, jak i obcisłe obiekty siatki przy użyciu tego samego zestawu SasHostParameterValue Collection wartości z inną interpretacją.

SasBindAddress

Ta adnotacja jest dodawana na początku pliku efektu w celu skojarzenia parametru efektu z odpowiednim parametrem zdefiniowanym w SasHostParameterValue Collection. Adnotacja jest zadeklarowana następująco:

string SasBindAddress = "SasHostParameterValue";

W tym przykładzie macierz świata efektu jest powiązana z macierzą MeshToJointToWorld:

float4x3 World
<
  string SasBindAddress = "Sas.Skeleton.MeshToJointToWorld[0]";
>;

Ta adnotacja informuje aplikację gospodarza, że musi ustawić wartość macierzy świata efektu przy użyciu danych z macierzy MeshToJointToWorld.

Składnia adnotacji adresu powiązania została zdefiniowana tak, aby była bardzo podobna do składni używanej przez ID3DXEffect do uzyskiwania i ustawiania parametrów efektu. Jedyną różnicą między gramatyką DXSAS a metodami ID3DXEffect jest dodanie tokenu indeksowego gwiazdki. Oto kolejny przykład użycia indeksu gwiazdki:

float3 LightColors[6]
<
  string SasBindAddress = "Sas.Light[*].Color";
>;

Token indeksu gwiazdki oznacza, że wszystkie elementy tablicy wartości dla określonego środowiska hosta (kolor w tym przypadku) powinny być powiązane ze skojarzonym parametrem. Wiele tokenów indeksu gwiazdki umożliwia powiązanie efektów z elementami podrzędnymi tablicy struktur bez konieczności powiązania całej struktury. W tym przykładzie wartości kolorów pierwszych sześciu świateł są powiązane z parametrem efektowym.

Standardowe adnotacje i semantyka DirectX – odniesienie