Associação de dados

Use a Coleção SasHostParameterValue para definir a coleção de valores de aplicativo host, bem como seus tipos e membros, expostos a efeitos. Use a anotação SasBindAddress em um arquivo de efeito para associar um parâmetro de efeito ao parâmetro correspondente no aplicativo host.

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 reais, mas são válidos no SasHostParameterValue. Um aplicativo host pode implementar SasHostParameterValue de qualquer maneira, 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 ([Raiz do SDK]/Utilitários/Fonte/Sas/Sas.fxh).

Observe que as matrizes no SasHostParameterValue, como Luzes ou Câmeras, têm comprimento não associado. Isso significa que os efeitos podem ser associados a qualquer índice arbitrário nessas matrizes e os aplicativos host devem fornecer padrões significativos nos casos em que nenhum valor de aplicativo pode ser fornecido.

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

Coleção SasHostParameterValue Tipo Membro
Hora FLOAT Sas.Time.Now
FLOAT Sas.Time.Last
INT Sas.Time.FrameNumber
Mapa do Ambiente textureCUBE Sas.EnvironmentMap
Câmera 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

 

Hora

O relógio virtual ou o valor de hora 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 Agora na renderização anterior.
  • Sas.Time.FrameNumber - o valor do contador incrementado uma vez por quadro renderizado.

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

Mapa do Ambiente

Um mapa de ambiente cúbico. Os aplicativos host devem fornecer uma textura de cubo válida se um efeito tentar associar a Sas.EnvironmentMap.

Câmera

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

  • Sas.Camera.WorldToView - a matriz composta de visão de 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óximos e distantes.

Claro

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

  • 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 na cena. O valor padrão é 0.
  • Theta - o ângulo de cone interno de um holofote, medido em radianos. O valor padrão é 0.
  • Phi - o ângulo de cone externo de um holofote, medido em radianos. O valor padrão é 0.

O número de luzes deve ser definido como o número de luzes associadas à matriz associada. Os efeitos podem optar por ignorar o número de luzes e associar a qualquer elemento de uma das matrizes de luz. Portanto, os aplicativos host devem fornecer uma associaçã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.

Shadow

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 sampler da seguinte maneira:

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 quadro são ossos e transformações. Isso 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 dá suporte a objetos de malha rígida e esfolada usando o mesmo conjunto de valores da Coleção SasHostParameterValue com interpretação diferente.

SasBindAddress

Essa anotação é adicionada à parte superior de um arquivo de efeito para associar um parâmetro de efeito ao parâmetro correspondente definido na Coleção SasHostParameterValue. A anotação é declarada desta forma:

string SasBindAddress = "SasHostParameterValue";

Este exemplo associa a matriz de mundo de efeito à matriz MeshToJointToWorld:

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

Essa anotação informa ao aplicativo host que ele precisa definir o valor da matriz de mundo de efeito usando os dados na matriz MeshToJointToWorld.

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

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

O token de índice de asterisco indica que todos os elementos da matriz de valor de ambiente de host específico (cor nesse caso) devem ser associados no parâmetro associado. Vários tokens de índice de asterisco permitem que os efeitos se associem a subelementos de uma matriz de estruturas sem a necessidade de associar toda a estrutura em si. Este exemplo associa os valores de cor das seis primeiras luzes a um parâmetro de efeito.

Referência de semântica e anotações padrão do DirectX