Pergunta

Ok, na minha GLSL fragmento shader eu quero ser capaz de calcular a distância do fragmento a partir de uma linha particular no espaço.

O resultado disso é que eu estou primeiro tentando usar um conjunto vec2 variando em meu Vertex Shader para espelhar o que acaba em gl_FragCoord:

varying vec2 fake_frag_coord;
//in vertex shader:
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
fake_frag_coord=(gl_ModelViewProjectionMatrix * gl_Vertex).xy;

Agora, no shader de fragmento I esperar:

gl_FragCoord.xy==fake_frag_coord

Mas isso não acontece. O funcionamento é que o pipeline de fazer no gl_Position para transformá-lo em gl_FragCoord que estou deixando de fazer no fake_frag_coord?

Foi útil?

Solução

gl_FragCoord é coordenadas de tela, então você precisa ter informações sobre o tamanho da tela e tal para produzi-lo com base na posição. O fake_frag_coord você produziu corresponderá a um ponto na tela em coordenadas do dispositivo normalizado Eu acho que (-1 a 1). Então, se você fosse para multiplicar por metade do tamanho da tela em uma dimensão particular, e, em seguida, adicionar esse tamanho, você terá pixels de tela real.

Outras dicas

O problema que você tem é que gl_ModelViewProjectionMatrix * gl_Vertex calculado em um shader não é sempre que os rendimentos de pipeline de função fixa. Para obter resultados idênticos, fazer fake_frag_coord = ftransform ().

Editar:

E, em seguida, escalá-lo com suas dimensões da tela.

Eu gostaria de ter mais rep para que eu pudesse procurar defeitos também. Aqui está o que eu sei. OpenGL realiza a divisão por W automaticamente para você, por isso, o tempo de uma posição chega em um shader de fragmento, ele já está em coordenadas NDC, e, em seguida, W será 1.0, a única vez que você precisa para dividir por W é se você quer fazer a mesma matemática no lado da CPU, e obter os mesmos resultados, OR, se por algum motivo estranho, queria obter coordenadas NDC dentro do seu shader de vértice.

varying vec2 fake_frag_coord;
//in vertex shader:

fake_frag_coord=(gl_ModelViewMatrix * gl_Vertex).xy
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top