Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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.
Tópicos relacionados