0

私は現在いくつかのシェーダーコードを使用していますが、それらのいくつかは私を混乱させます。入ってくるgl_vertexを使用してeyevectorを計算し、次にvectorを反映します。最後にfragシェーダーに渡します。フラグシェーダーのパスで、textureCubeを介してtexlを抽出します。私の質問は、gl_Vertexごとに1ピクセルしか取得できないということですか?それらのシェーダーはどこで補間されますか?

 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;  
    }
4

1 に答える 1

1

それらのシェーダーはどこで補間されますか?

フラグメントシェーダーは、フラグメントごとに実行されます。ピクセルは少なくとも1つのフラグメントで構成されます。頂点とフラグメントシェーダーの間で、フラグメントシェーダーに向かって変化する入力は、バリーセントリックに補間されます。

于 2013-03-10T12:50:25.033 に答える