1. 程式人生 > >頂點和片段著色器

頂點和片段著色器

即使您沒有看到 for 迴圈。所以會處理 VertexBuffer 中的所有頂點。

您也可以將常量值以常量暫存器的形式從 ActionScript 傳遞到 VertexShader。每次您希望執行著色器(每次您呼叫 Context3D::drawTriangles 方法來呈現一個結構),您都可以傳入一個不同的值。著色器可以處理這個常量值,以調整它的演算法和輸出。

頂點著色器的輸入是一個 VertexBuffer,它由一個或多個頂點屬性流組成。在最低限度,一個頂點緩衝區必須包含頂點位置。這些頂點位置通常指一個 位於每個 3D 模型本地的座標系統(每個模型擁有自己的原點)。頂點著色器將位置傳輸到螢幕空間,以便它們可以正確地顯示。頂點緩衝區可能還包含其他頂點屬 性,比如頂點顏色或紋理UV座標。頂點著色器通常傳遞這些值作為輸出(最終在處理它們之後),以便它們可以由 Rasterizer 插入並作為輸入傳入到片 段著色器中。

頂點著色器最明顯和自然的用途是對螢幕中的幾何形狀執行矩陣變換。您會獲得本地空間中的所有頂點。並將變換矩陣傳遞給頂點著色器。頂點著色器將使用矩陣轉 換 VertexBuffer 中的所有頂點。它會非常塊地執行此任務。比您在 ActionScript 中編寫程式碼要快得多,因為它是硬體加速的。

有趣的是,頂點著色器完全是可程式設計的。您可通過您喜歡的任何方式修改您的幾何形狀。例如,一個修改頂點位置的典型應用是骨頭的建立:您可以定義一組骨頭、 您的幾何形狀的一個框架,以及一個面板(網格)。當骨頭旋轉時,它們位於一個層次結構中,它們修改其面板的形狀。這正是建立手指動畫的方式。這麼做的最佳 方式是將骨頭的旋轉(轉換)傳遞給一個頂點著色器,讓頂點著色器修改面板,以便它看起來得到了恰當的繪製和變形。

頂點著色器還有許多其他的應用:模擬軟布的外觀,或者變形物體。建立兩個網格,它們具有相同數量的頂點,讓頂點著色器依據變形引數將網格1變形為網格2。