Domanda

Ok, a mio GLSL frammento di shader voglio essere in grado di calcolare la distanza del frammento da una particolare linea nello spazio.

Il risultato di questo è che sto cercando di usare prima un vec2 variabile impostata nel mio vertex shader di rispecchiare ciò che finisce in gl_FragCoord:

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

Ora nello shader frammento mi aspetto:

gl_FragCoord.xy==fake_frag_coord

Ma non è così. Che operazione fa il gasdotto fare sul gl_Position per trasformarlo in gl_FragCoord che sto trascurando di fare sul fake_frag_coord?

È stato utile?

Soluzione

gl_FragCoord è coordinate dello schermo, in modo che ci si bisogno di avere informazioni circa la dimensione dello schermo e tale da produrre in base alla posizione. Il fake_frag_coord aver prodotto corrisponderà ad un punto nello schermo dispositivo normalizzato coordinate Credo (-1 a 1). Quindi, se si dovesse moltiplicare per la metà dimensioni dello schermo in una dimensione particolare e quindi aggiungere tale dimensione, si otterrebbe pixel dello schermo attuali.

Altri suggerimenti

Il problema che ho è che gl_ModelViewProjectionMatrix * gl_Vertex calcolato in uno shader non è sempre quello che i rendimenti di pipeline funzione fissi. Per ottenere risultati identici, do fake_frag_coord = ftransform ().

Modifica:

E poi scalare con i tuoi dimensioni dello schermo.

Vorrei avere più rep così ho potuto pignoli troppo. Ecco quello che so. OpenGL esegue la divisione per W automaticamente per voi, così da tempo una posizione arriva in uno shader frammento, è già in coordinate NDC, e da allora W sarà 1.0, l'unica volta che è necessario dividere per W è se vuole fare lo stesso per la matematica sul lato CPU, e ottenere gli stessi risultati, o, se per qualche strana ragione, voleva ottenere le coordinate NDC all'interno vertex shader.

varying vec2 fake_frag_coord;
//in vertex shader:

fake_frag_coord=(gl_ModelViewMatrix * gl_Vertex).xy
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top