Programação com OpenGL/Modern OpenGL Tutorial 03: diferenças entre revisões

[edição verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
Linha 67:
 
== Varyings: Passando informações do Vertex Shader para o Fragment Shader ==
 
Em vez de usar um atributo, vamos usar uma variável '''''varying'''''. Assim:
* Uma variável ''output(saida)'' para o vertex shader
* Um variavel ''input(entrada)'' para o fragment shader
* Isto é interpolado.
 
assim teremos um canal de comunicação entre os dois shader. para entender porque ele é interpolado, vamos ao seguinte exemplo.
 
Nós vamos declarar nossa nova varying, dizendo <code>f_color</code>, no
 
We need to declare our new varying, mencionado tanto no <code>f_color</code>, como no shaders.
 
{{Yellow Warning|''' Uma declaração ''varying'' precisa ser identificado no vertex shader e no fragment shader.'''}}
 
em triangle.v.glsl:
<source lang="glsl">
attribute vec2 coord2d;
attribute vec3 v_color;
varying vec3 f_color;
void main(void) {
gl_Position = vec4(coord2d, 0.0, 1.0);
f_color = v_color;
}
</source>
 
em triangle.f.glsl:
<source lang="glsl">
varying vec3 f_color;
void main(void) {
gl_FragColor = vec4(f_color.x, f_color.y, f_color.z, 1.0);
}
</source>
 
(Nota: se estamos usando a GLES2, verifique a seção de portabilidade abaixo.)
 
Vamos ver o resultado:
 
[[File:OpenGL Tutorial Triangle no-fade version.png|thumb|Triângulo]]
 
nossa, temos realmente mais de três cores!
 
O OpenGL interpola os valores dos vertices em cada pixel.
Isto explica o nome ''varying(algo como variando)'': ele varia para cada vértice(vertex), e depois varia mais em cada fragmento(fragment).
 
Nós não podemos declarar um varying no código C - que não tem uma interface que suporte varying em C.
 
== Intercalando coordenadas e cores ==
 
== Referências ==