数据绑定
使用 SasHostParameterValue 集合 来定义主机应用程序值的集合,以及它们向效果公开的类型和成员。 在效果文件中使用 SasBindAddress 批注将效果参数与其在主机应用程序中的对应参数相关联。
SasHostParameterValue 集合
SasHostParameterValue 是使用效果文件 (.fx) 语法定义的。 虽然语法与效果文件语法非常相似,但存在一些差异。 例如,对象类型(如 texture2d、采样器和字符串)在实际效果文件中无效,但在 SasHostParameterValue 中有效。 只要主机应用程序符合以下说明,就可以以任何方式实现 SasHostParameterValue;实际定义位于 DXSAS 标准效果中,包括文件 ([SDK 根]/Utilities/Source/Sas/Sas.fxh) 。
请注意,SasHostParameterValue 中的数组(如 Lights 或 Cameras)的长度不受限制。 这意味着效果可以绑定到这些数组中的任何任意索引,在无法提供应用程序值的情况下,主机应用程序必须提供有意义的默认值。
某些类型和常量需要在 DXSAS 标准包含中定义,如标准包含的定义中所述。 这允许效果轻松地将 SasHostParameterValue 中的聚合值绑定到结构化效果参数。
SasHostParameterValue 集合 | 类型 | 成员 |
---|---|---|
时间 | FLOAT | Sas.Time.Now |
FLOAT | Sas.Time.Last | |
int | Sas.Time.FrameNumber | |
环境映射 | textureCUBE | Sas.EnvironmentMap |
摄像头 | SasCamera | Sas.Camera |
float4x4 | Sas.Camera.WorldToView | |
float4x4 | Sas.Camera.Projection | |
float2 | Sas.Camera.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 - 每个呈现的帧递增一次的计数器值。
效果必须正确处理这样一个事实,即这些成员的值可能会在极长的执行时间内环绕。 Now 和 Last 可能具有非常大的值。
环境映射
三次环境映射。 如果效果尝试绑定到 Sas.EnvironmentMap,主机应用程序必须提供有效的多维数据集纹理。
照相机
当前正在渲染的相机。 成员包括:
- Sas.Camera.WorldToView - 相机的复合世界视图矩阵。
- Sas.Camera.Projection - 相机的投影矩阵。
- Sas.Camera.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";
>;
星号索引标记表示,在这种情况下,特定主机环境值数组的所有元素 (颜色,) 应绑定在关联的参数中。 多个星号索引标记允许效果绑定到结构数组的子元素,而无需绑定整个结构本身。 此示例将前六盏灯的颜色值绑定到效果参数。
相关主题