2014-02-21 133 views
0

我知道用一個非常簡單的頂點着色器一樣片段着色器顏色插值:細節和硬件支持

attribute vec3 aVertexPosition; 
attribute vec4 aVertexColor; 
uniform mat4 uMVMatrix; 
uniform mat4 uPMatrix; 
varying vec4 vColor; 

void main(void) { 
    gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0); 
    vColor = aVertexColor; 
} 

和一個非常簡單的片段着色器一樣

precision mediump float; 
varying vec4 vColor; 

void main(void) { 
    gl_FragColor = vColor; 
} 

繪製紅色三角形,藍色和綠色頂點最終將具有這樣

interpolated triangle

三角形0

我的問題是:

  1. 做計算插值片段顏色屬於一個三角形(或原)並行發生在GPU?
  2. 在三角形內插入碎片顏色的算法和硬件支持是什麼?

回答

4

enter image description here

插值是步驟片段處理器

算法非常簡單,他們只是根據其UV

enter image description here enter image description here

1
  1. 是內插的顏色,絕對。
  2. 三角形顏色插值是固定功能流水線的一部分(它實際上是光柵化步驟的一部分,它發生在碎片處理之前),所以它完全用硬件完成,可能全部是視頻卡。可以找到用於內插頂點數據的等式。在OpenGL 4.3 specification,部分14.6.1(第405-406頁)。該算法爲三角形定義barycentric coordinates,並使用它們在頂點之間插值。
0

第一個問題 - 儘管GPU上有並行單元,但它取決於三角形的大小。對於大多數圖形處理單元來說,繪圖發生在一個圖塊的基礎上,並且根據三角形的「屏幕」尺寸,如果它完全落在一個圖塊中,它將僅在一個圖塊處理器中完全處理。如果它是分裂的,它可以由不同的單位並行完成。

第二個問題由我面前的其他海報回答。

1

除了這裏給出的答案之外,我想補充一點,不需要專用的固定功能硬件來進行插值。現代GPU傾向於使用「拉模式插值」,其中插值實際上是通過着色器單元完成的。

我推薦閱讀Fabian Giesen's blog article關於該主題(以及關於genreal中的圖形管道的整個系列文章)。

相關問題