2014-05-15 84 views
0

我在練習期中遇到了這個問題,我不明白。GLSL練習中期

void main(void){ 
    int i; 
    for(i=0; i< gl_VerticesIn; i++){ 
     gl_Position = gl_PositionIn[i]; 
     EmitVertex(); 
} 
    EndPrimitive(); 
    for(i=0; i< gl_VerticesIn; i++){ 
     gl_Position = gl_PositionIn[i]; 
     gl_Position.xy = gl_Position.yx; 
     EmitVertex(); 
    } 
    EndPrimitive(); 
} 

我一直在閱讀文檔,而且我認爲這是一個幾何着色器的一部分,我認爲這是反轉每個點的X和Y座標,但是我沒有任何辦法來驗證這個。我嘗試在程序中檢查它,並且在場景的着色方面略有不同,但它幾乎沒有改變幾何圖形,所以如果有人能夠幫助解釋這一點,那將是非常棒的。謝謝!

回答

0

這確實是幾何着色器的一部分。

着色器的第一部分(以第一個EndPrimitive()結尾)是最簡單的傳遞幾何着色器,它對幾何體完全沒有影響。

第二部分幾乎是相同的,除了與xy swizzling。它複製幾何圖形,但更改了xy座標,因此它有效地反映了連接屏幕左下角和右上角的線上的圖像。

所以,幾何圖形被複制並鏡像在屏幕的對角線上。