数据绑定

使用 SasHostParameterValue 集合 定义主机应用程序值的集合及其类型和成员,并公开效果。 使用效果文件中的 SasBindAddress 批注将效果参数与其在主机应用程序中的相应参数相关联。

SasHostParameterValue 集合

SasHostParameterValue 是使用效果文件 (.fx) 语法定义的。 虽然语法与效果文件语法非常相似,但存在一些差异。 例如,对象类型(如 texture2d、采样器和字符串)在实际效果文件中无效,但在 SasHostParameterValue 中有效。 只要符合以下说明,主机应用程序就可以以任何方式实现 SasHostParameterValue;实际定义位于 DXSAS 标准效果中,包括文件 ([SDK 根]/Utilities/Source/Sas/Sas.fxh) 。

请注意,SasHostParameterValue 中的数组(如 Lights 或 Camera)的长度未绑定。 这意味着效果可以绑定到这些数组和主机应用程序中的任何任意索引,在无法提供任何应用程序值的情况下,必须提供有意义的默认值。

某些类型和常量需要在 DXSAS 标准中定义,如标准包括的定义中所述。 这允许效果将 SasHostParameterValue 中的聚合值轻松绑定到结构化效果参数。

SasHostParameterValue 集合 类型 成员
时间 FLOAT Sas.Time.Now
FLOAT Sas.Time.Last
int Sas.Time.FrameNumber
环境映射 textureCUBE Sas.EnvironmentMap
摄像头 SasCamera Sas。相机
float4x4 Sas。相机。WorldToView
float4x4 Sas。相机。投影
float2 Sas。相机。NearFarClipping
浅色 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
骨架 float4x4 Sas.Skeleton.MeshToJointToWorld[OneOrMore]
int Sas.Skeleton.NumJoints

 

时间

主机应用程序的虚拟时钟或时间值。 成员包括:

  • Sas.Time.Now - 将呈现效果的点的主机应用程序虚拟时钟的值。
  • Sas.Time.Last - 上一个呈现处的 Now 值。
  • Sas.Time.FrameNumber - 每个呈现的帧递增一次的计数器值。

效果必须正确处理这些成员的值在极其长时间的执行时间内可能环绕的事实。 现在和最后可能具有非常大的值。

环境映射

立方环境映射。 如果效果尝试绑定到 Sas.EnvironmentMap,主机应用程序必须提供有效的多维数据集纹理。

照相机

当前正在渲染的相机。 成员包括:

  • Sas。相机。WorldToView - 相机的复合世界视图矩阵。
  • Sas。相机。投影 - 相机的投影矩阵。
  • Sas。相机。NearFarClipping - 近和远剪平面的值。

一个或多个场景灯。 灯集合声明为数组,其中:

  • 颜色 - RGB 颜色。 默认值为 (0,0,0)。
  • 方向 - 光线方向。 默认值为 (0,0,0)。
  • 范围 - 光射线对场景没有影响的光的距离。 默认值为 0。
  • Theta - 聚光灯的内部锥角,以弧度测量。 默认值为 0。
  • Phi - 聚光灯的外锥角度,以弧度测量。 默认值为 0。

灯数必须设置为绑定到关联数组的灯数。 效果可以选择忽略灯光数,并绑定到其中一个光数组的任何元素。 因此,主机应用程序必须为数组中的灯光数之外的元素提供有效的绑定。

ZeroOrMore 表示数组可能具有任意数量的元素。

Shadow

阴影缓冲区,包括:

  • WorldToShadow - 矩阵数组。
  • ShadowMap - 2D 纹理文件。

ZeroOrMore 表示数组可能具有任意数量的元素, (零表示空数组) 。

效果将声明采样器,如下所示:

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

sampler ShadowSampler = shadow_sampler(Shadow);

骨架

构成当前呈现对象的帧集。 框架示例包括骨头和转换。 这包括:

  • MeshToJointToWorld - 矩阵数组。
  • NumJoints - 骨架中的关节数。

OneOrMore 表示数组至少有一个,并且可能包含任意数量的元素。

该定义支持使用具有相同解释的 SasHostParameterValue 集合 值的同一组僵硬网格对象和皮肤网格对象。

SasBindAddress

此批注添加到效果文件的顶部,以将效果参数与其在 SasHostParameterValue 集合中定义的相应参数相关联。 批注声明如下:

string SasBindAddress = "SasHostParameterValue";

本示例将效果世界矩阵绑定到 MeshToJointToWorld 矩阵:

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

此批注告知主机应用程序,它需要使用 MeshToJointToWorld 矩阵中的数据设置效果世界矩阵的值。

绑定地址注释语法的定义与 ID3DXEffect 用于获取和设置效果参数的语法非常相似。 DXSAS 语法和 ID3DXEffect 方法之间的唯一区别是添加星号索引令牌。 下面是使用星号索引的另一个示例:

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

星号索引标记表示,在这种情况下,特定主机环境值数组的所有元素 (颜色,) 应在关联的参数中绑定。 多个星号索引标记允许影响绑定到结构数组的子元素,而无需绑定整个结构本身。 本示例将前六个灯光的颜色值绑定到效果参数。

DirectX 标准批注和语义参考