triangle texture stb_image normalized learnopengl opengl-es shader

opengl-es - texture - opengl triangle



OpenGL ES Shader para delinear imágenes 2D (1)

¿Aceptaría un filtro de detección de bordes (como Sobel), produciendo una imagen como la que se muestra en el artículo de Wikipedia , seguida de un desenfoque gaussiano en los resultados de eso para suavizar los bordes y darle más brillo, luego componer esa imagen en tu escena?

En la práctica, probablemente solo puedas reutilizar los sombreadores de trazado 3d que has visto, aunque en teoría podrías inspeccionar cantidades de profundidad (con un esfuerzo prolongado en ES), cada uno que he visto era solo un efecto 2d en la imagen renderizada.

EDITAR: en una mayor consideración, el Laplaciano puede ser un poco más fácil de aplicar que el Sobel porque se puede hacer como sombreadores de convolución simple (como se describe en lugares como este ). Sin embargo, para estar seguro en el móvil, es posible que prefiera usar núcleos de 3x3 como máximo y escriba un sombreador diferente para cada efecto en lugar de hacerlo con datos. Por ejemplo, un desenfoque gaussiano aproximado, escrito en detalle:

void main() { mediump vec4 total = vec4(0.0); mediump vec4 grabPixel; total += texture2D(tex2D, texCoordVarying + vec2(-1.0 / width, -1.0 / height)); total += texture2D(tex2D, texCoordVarying + vec2(1.0 / width, -1.0 / height)); total += texture2D(tex2D, texCoordVarying + vec2(1.0 / width, 1.0 / height)); total += texture2D(tex2D, texCoordVarying + vec2(-1.0 / width, 1.0 / height)); grabPixel = texture2D(tex2D, texCoordVarying + vec2(0.0, -1.0 / height)); total += grabPixel * 2.0; grabPixel = texture2D(tex2D, texCoordVarying + vec2(0.0, 1.0 / height)); total += grabPixel * 2.0; grabPixel = texture2D(tex2D, texCoordVarying + vec2(-1.0 / width, 0.0)); total += grabPixel * 2.0; grabPixel = texture2D(tex2D, texCoordVarying + vec2(1.0 / width, 0.0)); total += grabPixel * 2.0; grabPixel = texture2D(tex2D, texCoordVarying); total += grabPixel * 4.0; total *= 1.0 / 16.0; gl_FragColor = total; }

Y una detección de borde laplaciano termina luciendo similar pero con constantes diferentes.

Como optimización, debe calcular sus puntos de muestreo relativos en el sombreador de vértices en lugar de en el sombreador de fragmentos, en la medida de lo posible, dado el límite de las variaciones, ya que al hacerlo evitará las lecturas de textura dependientes.

Estoy trabajando en un juego de iOS 2D con OpenGL 2.0 y me pregunto si es posible escribir un sombreador que describa las imágenes con un resplandor. Todas las imágenes son sprites 2D. Los ejemplos de sombreado que he visto para delinear son para objetos tridimensionales, por lo que no estoy seguro si es posible para imágenes en 2D.