2013-01-31 9 views
5

Also habe ich ein Dreieck bekam:Wie wissen OpenGL-Fragment-Shader, welches Pixel in einer Textur abgetastet werden soll?

Und ich habe einen Vertex-Shader bekam:

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

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

Und ich habe ein Fragment-Shader bekam:

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

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

Und ich füttere drei Sätze von Vertices und UVs, verschachtelt:

# 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 

Wie kann der Fragment-Shader Pixel A anders als Pixel B zeichnen? Was ändert sich?

+0

Sie fütterte eine Textur richtig? Warum erwartest du, dass sie gleich sind oder fragst du, wie Shadern an der GPU arbeiten? –

+0

@JesusRamos Ich frage, wie Shader funktionieren. Ich verstehe nicht, was sich ändert und wer es zwischen den Shader-Pässen ändert. –

+0

Überprüfen Sie die Antwort von @ genpfault. Ich wollte dasselbe sagen, aber er hat mich dazu geschlagen :) –

Antwort

7

Wie ich es die Rasterungsstufe der Pipeline GL interpolatesvTextureCoords über das Dreieck Gesicht verstehen, auf jedem Pixel mit den interpolierten Wert des Fragment-Shader läuft.

+0

Sehr gute Erklärung. Ich hätte es nicht besser sagen können. –

+0

So ändert sich 'vTextureCoords'? Werden alle variierenden Variablen irgendwie verändert? –

+0

Ja, alle 'varianten' im Fragment-Shader werden mit interpolierten Werten geladen. – genpfault