Compartir a través de


Enlace de datos

Use SasHostParameterValue Collection para definir la colección de valores de aplicación host, así como su tipo y sus miembros, expuestos a efectos. Use la anotación SasBindAddress en un archivo de efectos para asociar un parámetro de efecto con su parámetro correspondiente en la aplicación host.

Colección SasHostParameterValue

SasHostParameterValue se define mediante la sintaxis del archivo de efecto (.fx). Aunque la sintaxis es muy similar a la sintaxis del archivo de efecto, existen algunas diferencias. Por ejemplo, los tipos de objeto, como texture2d, samplers y cadenas, no son válidos en archivos de efectos reales, pero son válidos en SasHostParameterValue. Una aplicación host puede implementar SasHostParameterValue de cualquier manera, siempre que se ajuste a la descripción siguiente; la definición real se encuentra en el archivo de inclusión del efecto estándar DXSAS ([SDK Root]/Utilities/Source/Sas/Sas.fxh).

Tenga en cuenta que las matrices de SasHostParameterValue, como Lights o Camera, tienen una longitud sin enlazar. Esto significa que los efectos pueden enlazarse a cualquier índice arbitrario de esas matrices y aplicaciones host deben proporcionar valores predeterminados significativos en los casos en los que no se puede proporcionar ningún valor de aplicación.

Es necesario definir algunos tipos y constantes en el estándar DXSAS, como se indica en la definición de la inclusión estándar. Esto permite que los efectos enlacen fácilmente valores agregados de SasHostParameterValue a parámetros de efecto estructurados.

Colección SasHostParameterValue Tipo Miembro
Time FLOAT Sas.Time.Now
FLOAT Sas.Time.Last
int Sas.Time.FrameNumber
Mapa del entorno textureCUBE Sas.EnvironmentMap
Cámara SasCamera Sas.Camera
float4x4 Sas.Camera.WorldToView
float4x4 Sas.Camera.Projection
float2 Sas.Camera.NearFarClipping
Claro 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
Esqueleto float4x4 Sas.Skeleton.MeshToJointToWorld[OneOrMore]
int Sas.Skeleton.NumJoints

 

Time

Valor de hora o reloj virtual de la aplicación host. Los miembros incluyen:

  • Sas.Time.Now: el valor del reloj virtual de la aplicación host en el momento en que se representará el efecto.
  • Sas.Time.Last: el valor de Now en la representación anterior.
  • Sas.Time.FrameNumber: el valor del contador que se incrementa una vez por fotograma representado.

Los efectos deben controlar correctamente el hecho de que los valores de estos miembros pueden encapsularse potencialmente durante tiempos de ejecución extremadamente largos. Ahora y Last pueden tener valores muy grandes.

Mapa del entorno

Mapa de entorno cúbico. Las aplicaciones host deben proporcionar una textura de cubo válida si un efecto intenta enlazar a Sas.EnvironmentMap.

Cámara

La cámara que se está representando actualmente. Los miembros incluyen:

  • Sas.Camera.WorldToView: matriz de vista global compuesta para la cámara.
  • Sas.Camera.Projection: matriz de proyección para la cámara.
  • Sas.Camera.NearFarClipping: los valores de los planos de recorte cercanos y lejanos.

Claro

Una o varias luces de escena. La colección de luces se declara como una matriz donde:

  • Color: un color RGB. El valor predeterminado es (0,0,0).
  • Dirección: dirección de la luz. El valor predeterminado es (0,0,0).
  • Rango: distancia desde la luz donde los rayos de luz no tienen ningún efecto en la escena. El valor predeterminado es 0.
  • Theta: el ángulo de cono interno de un foco de foco, medido en radianes. El valor predeterminado es 0.
  • Phi: ángulo de cono exterior de un foco de foco, medido en radianes. El valor predeterminado es 0.

El número de luces debe establecerse en el número de luces enlazadas a la matriz asociada. Los efectos pueden optar por omitir el número de luces y enlazar a cualquier elemento de una de las matrices de luz. Por lo tanto, las aplicaciones host deben proporcionar un enlace válido para los elementos más allá del número de luces de la matriz.

ZeroOrMore implica que la matriz puede tener cualquier número de elementos.

Shadow

Búferes de sombras que constan de:

  • WorldToShadow: matriz de matrices.
  • ShadowMap: un archivo de textura 2D.

ZeroOrMore implica que la matriz puede tener cualquier número de elementos (cero significa una matriz vacía).

Un efecto declararía un muestreador de la siguiente manera:

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

sampler ShadowSampler = shadow_sampler(Shadow);

Esqueleto

Conjunto de marcos que componen el objeto de representación actual. Los ejemplos de fotogramas son huesos y transformaciones. Esto incluye:

  • MeshToJointToWorld: una matriz de matrices.
  • NumJoints: número de articulaciones en el esqueleto.

OneOrMore implica que la matriz tiene al menos una y puede contener cualquier número de elementos.

La definición admite objetos de malla rígidos y de máscara que usan el mismo conjunto de valores sasHostParameterValue Collection con una interpretación diferente.

SasBindAddress

Esta anotación se agrega a la parte superior de un archivo de efectos para asociar un parámetro de efecto con su parámetro correspondiente definido en la colección SasHostParameterValue. La anotación se declara de la siguiente manera:

string SasBindAddress = "SasHostParameterValue";

En este ejemplo se enlaza la matriz del mundo del efecto a la matriz MeshToJointToWorld:

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

Esta anotación indica a la aplicación host que necesita establecer el valor de la matriz del mundo del efecto mediante los datos de la matriz MeshToJointToWorld.

La sintaxis de anotación de dirección de enlace se definió para ser muy similar con la sintaxis utilizada por ID3DXEffect para obtener y establecer parámetros de efecto. La única diferencia entre la gramática DXSAS y los métodos ID3DXEffect es la adición del token de índice asterisco. Este es otro ejemplo mediante el índice asterisco:

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

El token de índice de asterisco indica que todos los elementos de la matriz de valores de host envirnmant (color en este caso) deben enlazarse en el parámetro asociado. Varios tokens de índice asterisco permiten que los efectos se enlacen a subelementos de una matriz de estructuras sin necesidad de enlazar toda la estructura. En este ejemplo se enlazan los valores de color de las seis primeras luces a un parámetro de efecto.

Referencia semántica y anotaciones estándar de DirectX