共用方式為


效果 (DirectComposition)

注意

針對 Windows 10 上的應用程式,我們建議使用 Windows.UI.Composition API,而不是 DirectComposition。 如需詳細資訊,請參閱 使用視覺層將傳統型應用程式現代化。

本主題討論 directComposition 效果Microsoft的基本概念,並描述 DirectComposition 支援的效果類型。

本主題包含下列各節:

什麼是 DirectComposition 效果?

DirectComposition 效果 是在視覺效果點陣化期間套用的位圖作業,以某種方式變更視覺效果的外觀。

DirectComposition 會先取得視覺子樹並轉譯成單一位圖,再套用效果,藉以建立效果。 例如,若要建立 3D 透視轉換效果,DirectComposition 會產生視覺子樹狀結構的影像,然後將影像紋理到根據 3D 轉換效果產生的矩陣轉換的 3D 平面。

DirectComposition 支援下列類型的效果。

效果類型 描述
不透明度 設定整個視覺效果的不透明度。
3D 檢視方塊轉換 將立體 (3D) 透視轉換效果套用至視覺效果。

 

注意

DirectComposition 不會在將效果套用至 3D 立體內容時進行特殊處理。 這表示在套用效果時,3D 內容可能會出現扭曲。

 

不透明度

不透明度效果可讓您設定在呈現視覺效果時套用至整個視覺效果的不透明度因數。 它與 Alpha 遮罩不同,因為相同的不透明度因數會套用至視覺效果中的所有圖元。 不透明度會指定為介於 0(完全透明)到 1 的值(完全不透明)。

不透明度因數會從父視覺效果套用至子視覺效果,但巢狀不透明度設定的可見效果不會顯示在個別子視覺效果的屬性值中。 例如,如果根視覺效果具有 50% (0.5) 不透明度,且其其中一個子系具有 20% (0.2) 不透明度,該子系的淨不透明度會轉譯為 10% (0.1),但子系的 Opacity 屬性值仍會是 0.2。

3D 透視轉換效果

本節描述 DirectComposition 用於執行 3D 透視轉換效果的座標空間。 它也描述 DirectComposition 支援的 3D 透視轉換效果類型。

注意

在 DirectComposition 中,將 3D 效果套用至可視化樹狀結構中的多個層級,與使用完整的 3D 引擎相同,例如 Microsoft Direct3D。 例如,請考慮具有單一子視覺效果的父視覺效果。 如果子視覺效果正向左旋轉 90 度(繞 Y 軸)旋轉,則子視覺邊緣的邊緣會面對查看器,因此我們預期視覺效果不會可見(因為位圖沒有真正的深度)。 如果父視覺效果接著向後旋轉到負 z 方向(繞 Y 軸)90 度,我們可能會預期子視覺效果會完全明顯地呈現(因為轉換彼此否定)。 不過,在 DirectComposition 中,情況並非如此。 子視覺效果不會顯示,因為它已「壓平成」父位圖。

 

DirectComposition 3D 座標空間

3D 轉換效果的 DirectComposition 座標空間會找出位圖表面左上角的原點 (0,0,0,0),而正 X 軸值會往右繼續,正 y 軸值往下走,而正 z 軸值會從原點向外往外,朝檢視者走去。 此圖顯示 DirectComposition 3D 座標空間。

directcompostion 3d 座標空間

3D 旋轉轉換效果

立體旋轉轉換效果會透過旋轉軸向量 [x,y,z] 位於指定中心點 (x,y,z) 的指定角度,以三維旋轉視覺效果。 角度是以度為單位指定。 默認旋轉軸向量為 [0,0,-1],而預設中心點是 (0,0,0,0,0)。

使用 IDCompositionDevice::CreateRotateTransform3D 方法來建立 3D 旋轉轉換物件。 方法會擷取 IDCompositionRotateTransform3D 介面,讓您可用來設定對象的屬性。

3D 縮放轉換效果

3D 縮放轉換效果會使視覺效果變大或更小。 它會以 [x,y,z] 方向縮放中央點 (x,y,z) 的視覺效果。 默認中心點是 (0,0,0)。

使用 IDCompositionDevice::CreateScaleTransform3D 方法來建立 3D 縮放轉換物件。 方法會擷取 IDCompositionScaleTransform3D 介面,讓您可用來設定對象的屬性。

3D 翻譯轉換效果

3D 轉譯轉換效果會變更視覺效果在 [x,y,z] 方向中的位置。

使用 IDCompositionDevice::CreateTranslateTransform3D 方法來建立 3D 轉譯轉換物件。 方法會擷取 IDCompositionTranslateTransform3D 介面,讓您可用來設定對象的屬性。

3D 矩陣轉換效果

IDCompositionMatrixTransform3D 介面可讓您定義自己的 4 by-4 轉換矩陣,並將其套用至視覺效果。 如果您需要套用無法透過其他 DirectComposition 3D 轉換效果介面使用的 3D 透視轉換效果類型,這個介面會很有用。 您可以填入 D3DMATRIX 結構並將其傳遞至 IDCompositionMatrixTransform3D::SetMatrix 方法來定義矩陣。 或者,您可以使用 IDCompositionMatrixTransform3D::SetMatrixElement 方法來設定矩陣的每個元素。

3D 轉換效果群組

IDCompositionDevice::CreateTransform3DGroup 會建立一組 3D 轉換效果集合,以群組形式套用至視覺效果。 數位可以包含任意數目的轉換物件,而且可以包含矩陣、旋轉、縮放和平移轉換。 3D 轉換物件的集合會產生轉換,其值為集合中個別轉換矩陣的矩陣乘法。

群組中個別轉換的順序很重要。 例如,如果您第一次旋轉,然後調整,然後轉譯,則得到的結果與第一次轉譯、旋轉、縮放結果不同。 DirectComposition 會遵循您在轉換 3D 群組內指定 3D 轉換的順序,其方式與 2D 轉換相同。 此外,在套用目前視覺效果中的所有 3D 轉換之後,3D 檢視方塊轉換會導致可視化樹狀結構扁平化。 這樣做可確保場景盡可能接近 3D。

效果物件

若要將效果套用至視覺效果,您必須先建立並設定效果對象的屬性,該物件代表您想要在視覺效果上產生的效果類型。 然後,您必須將效果物件套用至視覺效果的 Effect 屬性。

若要建立效果物件,請使用下列其中一個 IDCompositionDevice 介面方法,為您想要的效果類型建立效果物件。 下列方法會建立效果物件:

上述每個方法都會擷取可用來設定新建立效果對象的屬性的介面。 使用 介面方法,視需要設定屬性,以產生您想要的視覺效果。

效果物件的大部分屬性都可以產生動畫效果。 若要建立特定屬性的動畫效果,請建立動畫物件,並將它套用至您想要建立動畫的屬性;否則,請將 屬性設定為靜態值,以產生您想要的效果。 如需動畫屬性的詳細資訊,請參閱 動畫

若要將效果物件套用至視覺效果,請呼叫 IDCompositionVisual::SetEffect 方法。 當您將效果套用至視覺效果時,效果會套用至根於該視覺效果的整個視覺效果子樹。 因此,例如,如果您將視覺效果的不透明度設定為50%,則視覺效果子樹中的所有子視覺效果不透明度將會減少50%。 您可以將相同的效果物件套用至一或多個視覺效果。 如果您在將效果物件套用至視覺效果之後修改其屬性,則會重新撰寫所有視覺效果以反映變更。

藉由使用效果群組物件,您可以同時將多個效果套用至視覺效果。 請先呼叫 IDCompositionDevice::CreateEffectGroup 來建立效果群組對象,然後使用物件的 IDCompositionEffectGroup 介面,將效果新增至群組。

DirectComposition 概念