Liaison de données
Utilisez la collection SasHostParameterValue pour définir la collection de valeurs d’application hôte, ainsi que leur type et leurs membres, exposés aux effets. Utilisez l’annotation SasBindAddress dans un fichier d’effet pour associer un paramètre d’effet à son paramètre correspondant dans l’application hôte.
SasHostParameterValue Collection
SasHostParameterValue est défini à l’aide de la syntaxe de fichier d’effet (.fx). Bien que la syntaxe soit très similaire à la syntaxe du fichier d’effet, certaines différences existent. Par exemple, les types d’objets, tels que texture2d, les échantillonneurs et les chaînes, ne sont pas valides dans les fichiers d’effet réels, mais sont valides dans sasHostParameterValue. Une application hôte peut implémenter SasHostParameterValue de quelque manière que ce soit, à condition qu’elle soit conforme à la description ci-dessous . la définition réelle se trouve dans le fichier include de l’effet standard DXSAS ([Sdk Root]/Utilities/Source/Sas/Sas.fxh).
Notez que les tableaux dans SasHostParameterValue, tels que Lights ou Cameras, ont une longueur illimitée. Cela signifie que les effets peuvent être liés à n’importe quel index arbitraire dans ces tableaux et que les applications hôtes doivent fournir des valeurs par défaut significatives dans les cas où aucune valeur d’application ne peut être fournie.
Certains types et constantes doivent être définis dans la norme DXSAS incluent, comme indiqué dans la définition de la norme include. Cela permet aux effets de lier facilement des valeurs agrégées de SasHostParameterValue aux paramètres d’effet structuré.
SasHostParameterValue Collection | Type | Membre |
---|---|---|
Time | float | Sas.Time.Now |
float | Sas.Time.Last | |
int | Sas.Time.FrameNumber | |
Carte d’environnement | textureCUBE | Sas.EnvironmentMap |
Appareil photo | SasCamera | Sas.Camera |
float4x4 | Sas.Camera.WorldToView | |
float4x4 | Sas.Camera.Projection | |
float2 | Sas.Camera.NearFarClipping | |
Clair | SasAmbientLight | AmbientLight[ZeroOrMore]; |
int | Sas.NumAmbientLights | |
SasAmbientLight | DirectionalLight[ZeroOrMore]; | |
int | Sas.NumDirectionalLights | |
SasAmbientLight | PointLight[ZeroOrMore]; | |
int | Sas.NumPointLights | |
SasAmbientLight | SpotLight[ZeroOrMore]; | |
int | Sas.NumSpotLights | |
Shadow | float4x4 | Sas.Shadow[ZeroOrMore]. WorldToShadow |
texture2D | Sas.Shadow[ZeroOrMore]. ShadowMap | |
Squelette | float4x4 | Sas.Skeleton.MeshToJointToWorld[OneOrMore] |
int | Sas.Skeleton.NumJoints |
Temps
Horloge virtuelle ou valeur d’heure de l’application hôte. Les membres sont les suivants :
- Sas.Time.Now : valeur de l’horloge virtuelle de l’application hôte au moment où l’effet sera rendu.
- Sas.Time.Last : valeur de Maintenant au rendu précédent.
- Sas.Time.FrameNumber : valeur de compteur incrémentée une fois par image rendue.
Les effets doivent gérer correctement le fait que les valeurs de ces membres peuvent potentiellement être encapsulées pendant des temps d’exécution extrêmement longs. Now et Last peuvent avoir des valeurs très grandes.
Carte d’environnement
Carte d’environnement cubique. Les applications hôtes doivent fournir une texture de cube valide si un effet tente de se lier à Sas.EnvironmentMap.
Appareil photo
Caméra en cours de rendu. Les membres sont les suivants :
- Sas.Camera.WorldToView : matrice composite de vue du monde pour l’appareil photo.
- Sas.Camera.Projection : matrice de projection de la caméra.
- Sas.Camera.NearFarClipping : valeurs des plans de découpage proches et lointains.
Clair
Une ou plusieurs lumières de scène. La collection de lumières est déclarée sous la forme d’un tableau où :
- Couleur : couleur RVB. La valeur par défaut est (0,0,0).
- Direction : direction de la lumière. La valeur par défaut est (0,0,0).
- Range : distance de la lumière où les rayons lumineux n’ont aucun effet sur la scène. La valeur par défaut est 0.
- Téta - l’angle de cône interne d’un projecteur, mesuré en radians. La valeur par défaut est 0.
- Phi - angle cône externe d’un projecteur, mesuré en radians. La valeur par défaut est 0.
Le nombre de lumières doit être défini sur le nombre de lumières liées au tableau associé. Les effets peuvent choisir d’ignorer le nombre de lumières et de se lier à n’importe quel élément de l’un des tableaux de lumière. Par conséquent, les applications hôtes doivent fournir une liaison valide pour les éléments au-delà du nombre de lumières dans le tableau.
ZeroOrMore implique que le tableau peut avoir un nombre quelconque d’éléments.
Shadow
Mémoires tampons d’ombre qui se composent des éléments suivants :
- WorldToShadow : tableau de matrices.
- ShadowMap : fichier de texture 2D.
ZeroOrMore implique que le tableau peut avoir un nombre quelconque d’éléments (zéro signifie un tableau vide).
Un effet déclarerait un échantillonneur comme suit :
texture2D Shadow
<
string SasBindAddress = "Sas.Shadow[0].ShadowMap";
>;
sampler ShadowSampler = shadow_sampler(Shadow);
Squelette
Ensemble d’images qui composent l’objet de rendu actuel. Les exemples de cadres sont des os et des transformations. notamment :
- MeshToJointToWorld : tableau de matrices.
- NumJoints : nombre d’articulations dans le squelette.
OneOrMore implique que le tableau a au moins un et peut contenir n’importe quel nombre d’éléments.
La définition prend en charge les objets de maillage rigides et à apparence à l’aide du même ensemble de valeurs SasHostParameterValue Collection avec une interprétation différente.
SasBindAddress
Cette annotation est ajoutée en haut d’un fichier d’effet pour associer un paramètre d’effet à son paramètre correspondant défini dans la collection SasHostParameterValue. L’annotation est déclarée comme suit :
string SasBindAddress = "SasHostParameterValue";
Cet exemple lie la matrice de monde d’effet à la matrice MeshToJointToWorld :
float4x3 World
<
string SasBindAddress = "Sas.Skeleton.MeshToJointToWorld[0]";
>;
Cette annotation indique à l’application hôte qu’elle doit définir la valeur de la matrice effect world à l’aide des données de la matrice MeshToJointToWorld.
La syntaxe d’annotation d’adresse de liaison a été définie pour être très similaire à la syntaxe utilisée par ID3DXEffect pour obtenir et définir des paramètres d’effet. La seule différence entre la grammaire DXSAS et les méthodes ID3DXEffect est l’ajout du jeton d’index astérisque. Voici un autre exemple utilisant l’index astérisque :
float3 LightColors[6]
<
string SasBindAddress = "Sas.Light[*].Color";
>;
Le jeton d’index astérisque indique que tous les éléments du tableau de valeurs d’environnement hôte particulier (couleur dans ce cas) doivent être liés dans le paramètre associé. Plusieurs jetons d’index d’astérisque permettent aux effets de se lier à des sous-éléments d’un tableau de structures sans avoir à lier l’ensemble de la structure elle-même. Cet exemple montre comment lier les valeurs de couleur des six premières lumières à un paramètre d’effet.
Rubriques connexes