資料綁定
使用 SasHostParameterValue 集合 來定義主應用程式值的集合,以及其公開至效果的類型和成員。 在效果檔案中使用 SasBindAddress 注釋,將效果參數與其在主應用程式中的對應參數產生關聯。
SasHostParameterValue 集合
SasHostParameterValue 是使用效果檔案 (.fx) 語法來定義。 雖然語法與效果檔案語法非常類似,但有些差異存在。 例如,紋理2d、取樣器和字串等物件類型在實際效果檔案中無效,但在 SasHostParameterValue 中有效。 只要符合下列描述,主機應用程式就可以以任何方式實作 SasHostParameterValue;實際定義位於 DXSAS 標準效果中,包括檔案 ([SDK Root]/Utilities/Source/Sas/Sas.fxh) 。
請注意,SasHostParameterValue 中的陣列,例如 Lights 或 Cameras 具有未系結的長度。 這表示效果可以系結至這些陣列和主應用程式中的任何任意索引,在無法提供任何應用程式值的情況下,必須提供有意義的預設值。
某些類型和常數必須在 DXSAS 標準 include 中定義,如標準 include 的定義所述。 這可讓效果輕鬆地將匯總值從 SasHostParameterValue 系結至結構化效果參數。
SasHostParameterValue 集合 | 類型 | 成員 |
---|---|---|
Time | 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.Frameworkon.NumJoints |
時間
主應用程式的虛擬時鐘或時間值。 成員包括:
- Sas.Time.Now - 主應用程式虛擬時鐘的值,其會呈現效果的點。
- Sas.Time.Last - 上一個轉譯時的 Now 值。
- Sas.Time.FrameNumber - 每個轉譯畫面格遞增一次的計數器值。
效果必須適當地處理這些成員的值可能會在極長執行時間內包裝。 現在和 Last 可能有非常大的值。
環境對應
立方體環境對應。 如果效果嘗試系結至 Sas.EnvironmentMap,主機應用程式必須提供有效的 Cube 紋理。
相機
目前正在轉譯的相機。 成員包括:
- Sas.Camera.WorldToView - 相機的複合世界檢視矩陣。
- Sas.Camera.Projection - 相機的投影矩陣。
- Sas.Camera.NearFarClipping - 近距裁剪平面的值。
淺色
一或多個場景燈。 光線集合會宣告為數組,其中:
- 色彩 - RGB 色彩。 預設值為 (0,0,0)。
- 方向 - 光線方向。 預設值為 (0,0,0)。
- 範圍 - 光線光線對場景沒有作用的光線距離。 預設值為 0。
- Theta - 以弧度為單位的焦點內部圓錐角度。 預設值為 0。
- Phi - 以弧度測量的焦點外部圓錐角度。 預設值為 0。
光線數目必須設定為系結至相關聯陣列的光線數目。 效果可以選擇忽略光線數目,並系結至其中一個光線陣列的任何元素。 因此,主應用程式必須為數組中光線數目以外的專案提供有效的系結。
ZeroOrMore 表示陣列可能有任意數目的專案。
陰影
陰影緩衝區包含:
- 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";
>;
星號索引標記表示特定主機環境值陣列的所有元素 (色彩,在此情況下,) 應該系結在相關聯的參數中。 多個星號索引標記可讓效果系結至結構陣列的子項目,而不需要系結整個結構本身。 本範例會將前六個光線的色彩值系結至效果參數。
相關主題