2013-01-31 108 views
5

所以我有一個三角形:OpenGL片段着色器如何知道在紋理中採樣哪個像素?

而且我已經有了一個頂點着色器:

uniform mat4 uViewProjection; 
attribute vec3 aVertexPosition; 
attribute vec2 aTextureCoords; 
varying vec2 vTextureCoords; 

void main(void) { 
    vTextureCoords = aTextureCoords; 
    gl_Position = uViewProjection * vec4(aVertexPosition, 1.0); 
} 

而且我有一個片段着色器:

precision mediump float; 
uniform sampler2D uMyTexture; 
varying vec2 vTextureCoords; 

void main(void) { 
    gl_FragColor = texture2D(uMyTexture, vTextureCoords); 
} 

然後我輸入三組頂點和UV,交錯:

# x, y, z, s, t 
0.0, 1.0, 0.0, 0.5, 1.0 
-1.0, -1.0, 0.0, 0.0, 0.0 
1.0, -1.0, 0.0, 1.0, 0.0 

片段着色器如何知道像素A與像素B不同?什麼改變?

+0

你餵了一個紋理吧?你爲什麼期望它們是相同的,或者你問GPU着色器的工作方式? –

+0

@JesusRamos我在問着色器是如何工作的。我不明白什麼在改變,誰在改變着色器的通行證。 –

+0

查看@ genpfault的答案。我打算說同樣的事情,但他打敗了我:) –

回答

7

據我所知的GL管道interpolatesvTextureCoords穿過三角形面的光柵化階段,運行與所述插補值的各像素的片段着色器。

+0

非常好的解釋。我自己不能說得更好。 –

+0

那麼'vTextureCoords'變化了嗎?不知何故,所有變化的變量都會變化嗎? –

+0

是的,片段着色器中的所有「變化」都會加載插值。 – genpfault

相關問題