1. 程式人生 > >在OpenGL中,頂點著色器的輸出是如何傳遞到片段著色器的?

在OpenGL中,頂點著色器的輸出是如何傳遞到片段著色器的?

我正在學習OpenGL,基本已理解管線原理,但是有一個問題一直沒明白:我們知道頂點著色器可以傳遞變數到片段著色器,然而片段著色器和頂點著色器並不是1:1呼叫的。比如一個三角形有三個頂點,呼叫三次頂點著色器,三角形光柵話後會有很多的片段(插值的結果),每個片段都會呼叫一次片段著色器。那麼問題來了,片段著色器的輸入到底是處理哪個頂點時的輸出呢?片段是圖元光柵化的結果,為何只關聯到某一個頂點(正確嗎?),就近原則?
在下面連結有個類似的問題,但是還是沒明白。
opengl - How are vertex shader outs sent as inputs to the fragment shader?

還有一個關於光柵化插值方法的Blog: 光柵化插值方法

如果上面沒有描述清楚,換一種問法:現在,三個頂點依次呼叫依次vertex shader(呼叫3次),我們在vertex shader裡輸出頂點的座標給fragement shader用,變數名為vex_coord。由於生成的片段遠多餘三個(比如30個),30個片段要呼叫30次fragement shader,那們呼叫片段0,1,2,3...29時,vex_coord值分別是什麼呢?上面的vex_coord到底會有多少種值,3個(即圖元頂點)還是30個(即每個片段對應到三維空間上的點)或其他?
關於Shader的呼叫次數:
Vertex Shader

Number of invocation of vertex shader?
How many times shader executes?