Pergunta

É possível definir a cor de um único vértice usando um programa GLSL vertex shader, da mesma forma que gl_Position altera a posição de um vértice?

Foi útil?

Solução

Para versões do GLSL anteriores à versão 1.30, você deseja gravar no gl_FrontColor ou gl_BackColor built-ins, que são variantes acessíveis no sombreador de vértice.Leia sobre as variações na especificação GLSL 1.10 (http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.10.59.pdf) para saber mais sobre eles ou a especificação da extensão GL_ARB_vertex_shader.

gl_FrontColor e gl_BackColor são vetores RGBA 4D que utilizam escalares de ponto flutuante normalizados.

Mas isso irá definir todos os vértices para vermelho, não apenas um vértice.Isso ocorre porque o mesmo sombreador de vértice é executado para todos os vértices.Se você quiser definir cores individuais, use glColorPointer junto com glDrawArrays, glDrawElements, glDrawRangeElements ou glMultiDrawElements.A cor do vértice definida por glColorPointer pode ser lido como gl_Color no sombreador de vértice. gl_Color no sombreador de vértice há um atributo por vértice.

Para ler a cor que você escreveu no sombreador de vértice, no sombreador de fragmento, leia a variação integrada gl_Color.Os fragmentos finalizados devem ser gravados em gl_FragColor.

Exemplo de sombreador de vértice:

void main()
{
    gl_FrontColor = gl_Color;
    gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}

Exemplo de shader de fragmento:

void main()
{
    gl_FragColor = gl_Color;
}

Além disso, para fazer com que o vertex shader defina as variações exatamente como o pipeline de função fixa OpenGL, chame a função ftransform().

void main()
{
    ftransform();
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top