Pregunta

Bueno, en mi GLSL fragment shader Quiero ser capaz de calcular la distancia del fragmento de una línea particular en el espacio.

El resultado de esto es que estoy primero tratando de utilizar una variable vec2 fijar en mi vertex shader para reflejar lo que termina en gl_FragCoord:

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

Ahora en el fragment shader espero:

gl_FragCoord.xy==fake_frag_coord

Pero no lo hace. Lo que hace la operación del oleoducto en gl_Position para convertirlo en gl_FragCoord que estoy dejando de hacer en fake_frag_coord?

¿Fue útil?

Solución

gl_FragCoord es coordenadas de la pantalla, así que es necesario tener información sobre el tamaño de la pantalla y tal para producirlo basado en la posición. El fake_frag_coord que ha producido corresponderá a un punto de la pantalla en el dispositivo normalizado coordina Creo que (-1 a 1). Así que si usted fuera a multiplicar por la mitad del tamaño de la pantalla en una dimensión particular, y luego añadir ese tamaño, se obtendría píxeles de la pantalla actual.

Otros consejos

El problema que tiene es que gl_ModelViewProjectionMatrix * gl_Vertex calculada en un shader no es siempre lo que los rendimientos de tuberías de función fija. Para obtener resultados idénticos, do fake_frag_coord = ftransform ().

Editar:

Y luego escalar con sus dimensiones de la pantalla.

Me gustaría tener más representante para que pudiera pequeñez también. Esto es lo que sé. OpenGL realiza la división por W automáticamente para usted, de manera que cuando una posición llega en un fragment shader, que ya está en las coordenadas NDC, y para entonces W será 1.0, el único tiempo que necesita para dividir por W es si quiere hacer lo mismo matemáticas en el lado de la CPU, y obtener los mismos resultados, o, si por alguna extraña razón, quería conseguir NDC coordina dentro de su vertex shader.

varying vec2 fake_frag_coord;
//in vertex shader:

fake_frag_coord=(gl_ModelViewMatrix * gl_Vertex).xy
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top