Vinculação de dados

Use SasHostParameterValue Collection para definir a coleção de valores de aplicativo host, bem como seu tipo e membros, expostos a efeitos. Use a anotação SasBindAddress num ficheiro de efeito para associar um parâmetro de efeito ao seu parâmetro correspondente na aplicação anfitriã.

Coleção SasHostParameterValue

O SasHostParameterValue é definido usando a sintaxe do arquivo de efeito (.fx). Embora a sintaxe seja muito semelhante à sintaxe do arquivo de efeito, existem algumas diferenças. Por exemplo, tipos de objeto, como texture2d, samplers e strings, não são válidos em arquivos de efeito real, mas são válidos no SasHostParameterValue. Um aplicativo host pode implementar SasHostParameterValue de qualquer forma, desde que esteja em conformidade com a descrição abaixo; a definição real está localizada no arquivo de inclusão de efeito padrão DXSAS ([SDK Root]/Utilities/Source/Sas/Sas.fxh).

Observe que matrizes no SasHostParameterValue como luzes ou câmeras têm comprimento ilimitado. Isso significa que os efeitos podem ligar-se a qualquer índice arbitrário nessas matrizes, e as aplicações anfitriãs devem fornecer padrões significativos nos casos em que não seja possível fornecer um valor da aplicação.

Alguns tipos e constantes devem ser definidos no padrão DXSAS include, como observado na definição do padrão include. Isso permite que os efeitos vinculem facilmente valores agregados do SasHostParameterValue a parâmetros de efeito estruturados.

Coleção SasHostParameterValue Tipo Membro
Tempo flutuar Sas.Time.Now
flutuar Sas.Time.Last
Int Sas.Time.FrameNumber
Mapa do Ambiente texturaCUBE Sas.EnvironmentMap
Camera SasCamera Sas.Camera
float4x4 Sas.Camera.WorldToView
float4x4 Sas.Camera.Projeção
float2 Sas.Camera.NearFarClipping
Luz SasAmbientLight Luz Ambiente[ZeroOrMore];
Int Sas.NumAmbientLights
SasAmbientLight Luz Direcional [ZeroOrMore];
Int Sas.NumDirectionalLights
SasAmbientLight PointLight[ZeroOrMore];
Int Sas.NumPointLights
SasLuzAmbiente SpotLight[ZeroOrMore];
Int Sas.NumSpotLights
Sombra float4x4 Sas.Shadow[ZeroOrMore]. WorldToShadow
textura2D Sas.Shadow[ZeroOrMore]. Mapa de Sombras
Esqueleto float4x4 Sas.Skeleton.MeshToJointToWorld[OneOrMore]
Int Sas.Skeleton.NumArticulações

 

Hora

O relógio virtual ou o valor de tempo do aplicativo host. Os membros incluem:

  • Sas.Time.Now - o valor do relógio virtual do aplicativo host no ponto em que o efeito será renderizado.
  • Sas.Time.Last - o valor de Now na renderização anterior.
  • Sas.Time.FrameNumber - o valor do contador que é incrementado uma vez por quadro renderizado.

Os efeitos devem lidar adequadamente com o fato de que os valores desses membros podem potencialmente se envolver durante tempos de execução extremamente longos. Agora e Último podem ter valores muito grandes.

Mapa do Ambiente

Um mapa de ambiente cúbico. As aplicações hospedeiras devem fornecer uma textura de cubo válida se um efeito tentar associar-se a Sas.EnvironmentMap.

Câmara

A câmera está sendo renderizada no momento. Os membros incluem:

  • Sas.Camera.WorldToView - a matriz composta de visão do mundo para a câmera.
  • Sas.Camera.Projection - a matriz de projeção para a câmera.
  • Sas.Camera.NearFarClipping - os valores dos planos de recorte próximo e distante.

Luz

Uma ou mais luzes da cena. A coleção de luzes é declarada como uma matriz onde:

  • Cor - uma cor RGB. O valor padrão é (0,0,0).
  • Direção - a direção da luz. O valor padrão é (0,0,0).
  • Alcance - a distância da luz onde os raios de luz não têm efeito sobre a cena. O valor padrão é 0.
  • Theta - o ângulo do cone interno de um holofote, medido em radianos. O valor padrão é 0.
  • Phi - o ângulo do cone externo de um holofote, medido em radianos. O valor padrão é 0.

O número de luzes deve ser ajustado para o número de luzes ligadas à matriz associada. Os efeitos podem optar por ignorar o número de luzes e ligar-se a qualquer elemento de uma das matrizes de luz. Portanto, os aplicativos host devem fornecer uma ligação válida para elementos além do número de luzes na matriz.

ZeroOrMore implica que a matriz pode ter qualquer número de elementos.

Sombra

Buffers de sombra que consistem em:

  • WorldToShadow - uma matriz de matrizes.
  • ShadowMap - um arquivo de textura 2D.

ZeroOrMore implica que a matriz pode ter qualquer número de elementos (zero significa uma matriz vazia).

Um efeito declararia um amostrador desta forma:

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

sampler ShadowSampler = shadow_sampler(Shadow);

Esqueleto

O conjunto de quadros que compõem o objeto de renderização no momento. Exemplos de frames são ossos e transformações geométricas. Isto inclui:

  • MeshToJointToWorld - uma matriz de matrizes.
  • NumJoints - o número de articulações no esqueleto.

OneOrMore implica que a matriz tem pelo menos um e pode conter qualquer número de elementos.

A definição suporta tanto objetos de malha rígida quanto objetos de malha com pele, usando o mesmo conjunto de valores SasHostParameterValue Collection, mas com interpretações diferentes.

SasBindAddress

Essa anotação é adicionada à parte superior de um arquivo de efeito para associar um parâmetro de efeito ao parâmetro correspondente definido no SasHostParameterValue Collection. A anotação é declarada assim:

string SasBindAddress = "SasHostParameterValue";

Este exemplo vincula a matriz do mundo do efeito à matriz MeshToJointToWorld:

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

Esta anotação informa a aplicação host de que precisa definir o valor da matriz mundial do efeito usando os dados da matriz MeshToJointToWorld.

A sintaxe de anotação de endereço de ligação foi definida para ser muito semelhante à sintaxe usada por ID3DXEffect para obter e definir parâmetros de efeito. A única diferença entre a gramática DXSAS e métodos ID3DXEffect é a adição do token de índice de asterisco. Aqui está outro exemplo usando o índice de asterisco:

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

O token de índice asterisco indica que todos os elementos da matriz de valores do ambiente específico do host (neste caso, a cor) devem ser associados no parâmetro correspondente. Vários tokens de índice de asterisco permitem que os efeitos se liguem a subelementos de uma matriz de estruturas sem a necessidade de ligar toda a estrutura em si. Este exemplo define os valores de cor das seis primeiras luzes para um parâmetro de efeito.

Referência de Anotações e Semântica Padrão do DirectX