適用於 Adobe® Flash® Platform 的 ActionScript® 3.0 參考
首頁  |  隱藏套件和類別清單 |  套件  |  類別  |  新增內容  |  索引  |  附錄  |  為什麼顯示英文?
篩選: 從伺服器擷取資料...
從伺服器擷取資料...
flash.display 

Shader  - AS3

套件flash.display
類別public class Shader
繼承Shader Inheritance Object
子類別 ColorBurnShader, ColorDodgeShader, ColorShader, ExclusionShader, HueShader, LuminosityMaskShader, LuminosityShader, SaturationShader, SoftLightShader

語言版本: ActionScript 3.0
執行階段版本: Flash Player 10, AIR 1.5

Shader 實體代表了 ActionScript 中的 Pixel Bender 著色器核心。若要在應用程式中使用著色器,您可以為它建立 Shader 實體。接著根據您想要建立的特效,以適當方式使用該 Shader 實體。例如,若要將著色器當成濾鏡來使用,可以將 Shader 實體指派給 ShaderFilter 物件的 shader 屬性。

著色器會定義可在影像中所有像素上執行 (一次一個像素) 的函數。每一次呼叫函數的結果就是影像中該像素座標上的輸出色彩。著色器可以指定一個或多個輸入影像,而這些影像的內容可以用來決定函數的輸出。著色器也可以指定一個或多個參數,而這些參數的輸入值可以用來計算函數輸出。在單一著色器執行作業期間,輸入與參數值都是常數。為一不同的地方就是像素座標 (其色彩為函數結果)。著色器函數會呼叫多個輸出像素座標來同時執行以提升著色器執行作業效率。

著色器位元組碼可以在執行階段透過 URLLoader 實體來載入。下列範例示範在執行階段載入著色器位元組碼檔案,並將其與 Shader 實體連結。

     var loader:URLLoader = new URLLoader();
     loader.dataFormat = URLLoaderDataFormat.BINARY;
     loader.addEventListener(Event.COMPLETE, onLoadComplete);
     loader.load(new URLRequest("myShader.pbj"));
      
     var shader:Shader;
      
     function onLoadComplete(event:Event):void {
         // Create a new shader and set the loaded data as its bytecode
         shader = new Shader();
         shader.byteCode = loader.data;
         
         // You can also pass the bytecode to the Shader() constructor like this:
         // shader = new Shader(loader.data);
         
         // do something with the shader
     }
     

您也可以在編譯階段使用 [Embed] 中繼資料標籤將著色器內嵌到 SWF 中。只有當您使用 Flex SDK 來編譯 SWF,才能使用 [Embed] 中繼資料標籤。 [Embed] 標籤的 source 參數會指向著色器檔案,而其 mimeType 參數則是 "application/octet-stream",如以下範例所示:

     [Embed(source="myShader.pbj", mimeType="application/octet-stream)]
     var MyShaderClass:Class;
      
     // ...
     
     // create a new shader and set the embedded shader as its bytecode
     var shaderShader = new Shader();
     shader.byteCode = new MyShaderClass();
      
     // You can also pass the bytecode to the Shader() constructor like this:
     // var shader:Shader = new Shader(new MyShaderClass());
      
     // do something with the shader
     

不管是哪一項,您都可以將原始著色器 (即為 URLLoader.data 屬性或是 [Embed] 資料類別的實體) 連結至 Shader 實體。如以上範例所示,您可以透過兩種方式來執行這項作業。您可以將著色器位元組碼當成引數傳遞給 Shader() 建構函式。或者,您可以將它設為 Shader 實體的 byteCode 屬性。

一旦建立了 Shader 實體,就可以將其應用於以下任何一種情況:

  • 著色器填色:使用著色器輸出做為以繪圖 API 繪製的內容填色。將 Shader 實體當成引數傳遞給 Graphics.beginShaderFill() 方法。
  • 著色器濾鏡:著色器輸出可以當作圖像濾鏡來使用,並套用至顯示物件。將 Shader 實體指派給 ShaderFilter 實體的 shader 屬性。
  • 混合模式:著色器的輸出會在兩個重疊的顯示物件之間顯示為混合色彩。將 Shader 實體指派給兩個顯示物件上層的 blendShader 屬性。
  • 背景著色器處理:著色器會在背景執行以避免凍結顯示的可能,並在處理完成時傳送事件。將 Shader 實體指派給 ShaderJob 實體的 shader 屬性。

GPU 顯示不支援著色器填色、濾鏡與混合。

行動裝置瀏覽器支援:行動裝置瀏覽器不支援此功能。

AIR 描述檔支援:所有桌上型電腦作業系統都支援此項功能,但所有行動裝置都不支援。AIR for TV 裝置不支援。如需有關跨多個描述檔之 API 支援的詳細資訊,請參閱 AIR 描述檔支援

檢視範例

相關 API 元素



公用屬性
 屬性定義自
  byteCode : ByteArray
[唯寫] 此 Shader 實體的原始著色器位元組碼。
Shader
 Inheritedconstructor : Object
類別物件的參照或是特定物件實體的建構函數。
Object
  data : ShaderData
針對 Shader 實體提供參數、輸入影像,與中繼資料的存取能力。
Shader
  precisionHint : String
著色器所執行的數學運算精確度。
Shader
公用方法
 方法定義自
  
Shader(code:ByteArray = null)
建立新的 Shader 實體。
Shader
 Inherited
指出物件是否有已定義的指定屬性。
Object
 Inherited
指出 Object 類別的實體是否位於指定為參數的物件原型鏈中。
Object
 Inherited
指出指定的屬性是否存在,以及是否可列舉。
Object
 Inherited
為迴圈作業設定動態屬性的可用性。
Object
 Inherited
傳回代表此物件的字串,根據地區特定慣例進行格式化。
Object
 Inherited
會傳回指定之物件的字串形式。
Object
 Inherited
會傳回指定之物件的基本值。
Object
屬性詳細資訊

byteCode

屬性
byteCode:ByteArray  [唯寫]

語言版本: ActionScript 3.0
執行階段版本: Flash Player 10, AIR 1.5

此 Shader 實體的原始著色器位元組碼。



實作
    public function set byteCode(value:ByteArray):void

data

屬性 
data:ShaderData

語言版本: ActionScript 3.0
執行階段版本: Flash Player 10, AIR 1.5

針對 Shader 實體提供參數、輸入影像,與中繼資料的存取能力。代表著色器參數的 ShaderParameter 物件、代表著色器輸入影像的 ShaderInput 物件,以及其他代表著色器中繼資料的值都會在建立 Shader 實體時,當作 data 屬性物件的屬性來動態新增。這些屬性可以用來內觀著色器並設定參數與輸入值。

如需存取與操作 data 物件動態屬性的詳細資訊,請參閱 ShaderData 類別說明。



實作
    public function get data():ShaderData
    public function set data(value:ShaderData):void

相關 API 元素

precisionHint

屬性 
precisionHint:String

語言版本: ActionScript 3.0
執行階段版本: Flash Player 10, AIR 1.5

著色器所執行的數學運算精確度。

precisionHint 屬性的可能值集合是由 ShaderPrecision 類別中的常數所定義。

預設值為 ShaderPrecision.FULL。將精確度設為 ShaderPrecision.FAST 可以犧牲精確度來加速數學運算。

完整精確度模式 (ShaderPrecision.FULL) 會以 IEEE 32 位元浮動標準的完整寬度來計算所有數學運算,而且在所有平台上都提供一致的行為。在此模式中,例如三角法函數與指數函數的數學運作速度會比較緩慢。

快速精確度模式 (ShaderPrecision.FAST) 是針對最佳效能所設計的,但是無法針對不同的平台和個別 CPU 組態以一致的方式運作。在許多情況中,這種層級的精確度已經足以建立沒有可見雜訊的圖像特效。

精確度模式選擇會影響下列著色器作業。在含有 SSE 指令集的 Intel 處理器上處理這些作業速度會比較快:

  • sin(x)
  • cos(x)
  • tan(x)
  • asin(x)
  • acos(x)
  • atan(x)
  • atan(x, y)
  • exp(x)
  • exp2(x)
  • log(x)
  • log2(x)
  • pow(x, y)
  • reciprocal(x)
  • sqrt(x)



實作
    public function get precisionHint():String
    public function set precisionHint(value:String):void

相關 API 元素

建構函式詳細資料

Shader

()建構函式
public function Shader(code:ByteArray = null)

語言版本: ActionScript 3.0
執行階段版本: Flash Player 10, AIR 1.5

建立新的 Shader 實體。

參數
code:ByteArray (default = null) — 要連結至 Shader 的原始著色器位元組碼。
ShaderExample.1.as

下列範例會在執行階段載入著色器位元組碼檔案,並建立與其連結的 Shader 實體。

請注意,此範例假設和應用程式輸出目錄相同的目錄中存在一個名為「donothing.pbj」的著色器位元組碼檔案。您可以在 ShaderData 類別範例中取得 DoNothing 著色器的 Pixel Bender 原始碼。

package {
    import flash.display.Shader;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.net.URLLoader;
    import flash.net.URLLoaderDataFormat;
    import flash.net.URLRequest;

    public class LoadedShaderExample extends Sprite {
        
        private var loader:URLLoader;
        
        public function LoadedShaderExample() {
            loader = new URLLoader();
            loader.dataFormat = URLLoaderDataFormat.BINARY;
            loader.addEventListener(Event.COMPLETE, loadCompleteHandler);
            loader.load(new URLRequest("donothing.pbj"));
        }
        
        private function loadCompleteHandler(event:Event):void {
            var shader:Shader = new Shader();
            shader.byteCode = loader.data;
            
            // do something with the Shader instance
        }
    }
}
ShaderExample.2.as

以下範例會編譯著色器位元組碼檔案,以便將其內嵌至 SWF,並建立與其連結的 Shader 實體。

請注意,此範例假設和應用程式原始碼相同的目錄中存在一個名為「donothing.pbj」的著色器位元組碼檔案,且使用 Flex SDK 來編譯 SWF。您可以在 ShaderData 類別範例中取得 DoNothing 著色器的 Pixel Bender 原始碼。

package {
    import flash.display.Shader;
    import flash.display.Sprite;

    public class EmbeddedShaderExample extends Sprite {
        
        [Embed(source="donothing.pbj", mimeType="application/octet-stream")]
        private static var DoNothingShader:Class;
        
        public function EmbeddedShaderExample() {
            var shader:Shader = new Shader();
            shader.byteCode = new DoNothingShader();
            
            // do something with the Shader instance
        }
    }
}




[ X ]為什麼顯示英文?
「ActionScript 3.0 參考」的內容是以英文顯示

並非所有「ActionScript 3.0 參考」的內容都翻譯為所有語言。當語言元素未翻譯時,就會以英文顯示。例如,ga.controls.HelpBox 類別並沒有翻譯為任何語言。因此在參考的繁體中文版本中,ga.controls.HelpBox 類別就會以英文顯示。