共用方式為


資料綁定

使用 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";
>;

星號索引標記表示特定主機環境值陣列的所有元素 (色彩,在此情況下,) 應該系結在相關聯的參數中。 多個星號索引標記可讓效果系結至結構陣列的子項目,而不需要系結整個結構本身。 本範例會將前六個光線的色彩值系結至效果參數。

DirectX 標準注釋和語意參考