2013-03-10 126 views
0

我目前使用一些着色器代碼,但其中一些讓我感到困惑。它使用傳入的gl_vertex來計算出眼矢量,然後重新選擇vector.finally傳遞給frag着色器。在frag shader中通過textureCube提取texl。我的問題是,每個gl_Vertex只有一個像素?插值發生在那些着色器的哪裏?使用GLSL實現立方體貼圖

vertex shader: 
    uniform vec4 eyepos; 
    varying vec3 reflectvec; 
    void main(void) { 

    vec4 pos = normalize(gl_ModelViewMatrix * gl_Vertex);  
    pos = pos/pos.w;   
    vec3 eyevec = normalize(eyepos.xyz - pos.xyz);  
    vec3 norm = normalize(gl_NormalMatrix * gl_Normal);   
    reflectvec = reflect(-eyevec, norm);   
    gl_Position = ftransform(); 

    } 

    frag shader: 
    uniform samplerCube cubemap; 
    varying vec3 reflectvec; 

    void main(void) {  
    vec4 texcolor = textureCube(cubemap, reflectvec);  
    gl_FragColor = texcolor; 
    } 
+0

你的#版本指令在哪裏? – genpfault 2013-03-11 00:05:35

回答

1

其中插值發生在那些着色器?

爲每個片段執行片段着色器。像素由至少1個片段組成。在頂點和片段着色器之間,朝着片段着色器的輸入變化被重心插值。

+0

嗨,@datenwolf謝謝。它似乎是我理解錯誤。是不是在每個頂點都會執行頂點着色器,並且計算出變化的vec3反映爲初始值。在光柵化過程中,GPU使用初始值進行插入,換句話說,在頂點着色器中使用我的變量變量,然後將插值後的值傳遞給片段着色器。我對嗎? – 2013-03-10 14:04:14

+0

是的,頂點着色器爲每個頂點生成'reflectvec'。片段階段然後在將每個片段傳遞給片段着色器之前,先對「reflectvec」和頂點之間的其他變化進行插值。 – datenwolf 2013-03-10 14:32:46

+0

thx @datenwolf,你能告訴我它是如何插入兩個變化,甚至更多。 – 2013-03-10 16:01:20

相關問題