2013-03-10 51 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