Estoy trabajando en un juego para iOS 2D con OpenGL 2.0 y me pregunto si es posible escribir un sombreador que contornee 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 en 3D, por lo que no estoy seguro si es posible para imágenes 2D.OpenGL ES Shader para delinear imágenes en 2D
Respuesta
¿Aceptaría un filtro de detección de bordes (como Sobel), produciendo una imagen como la que se muestra en the Wikipedia article, seguido de un desenfoque gaussiano en los resultados para suavizar los bordes y darle más brillo, luego compuesto esa imagen en tu escena?
En la práctica, probablemente podría reutilizar los sombreadores de trazado 3d que ha visto, aunque en teoría podría inspeccionar las cantidades de profundidad (con un esfuerzo prolongado en ES), cada uno que he visto era solo un efecto 2d la imagen renderizada
EDITAR: en consideración adicional, el Laplaciano puede ser un poco más fácil de aplicar que el Sobel porque se puede hacer como sombreadores de convolución simples (como se describe en los lugares like this). 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 en bruto, en escrito extensamente:
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 un borde de Laplace detectar termina buscando constantes similares, pero con diferentes.
Como optimización, debe calcular sus puntos de muestreo relativos en el sombreado de vértices en lugar de en el sombreador de fragmentos en la medida de lo posible, dado el límite de variaciones, ya que esto evitará las lecturas de textura dependientes.
Tal vez no estoy mirando los 3D correctos, pero los que he visto parecen funcionar en cierta medida con la fuente de luz, lo que no le he dado es 2D. Tengo muy nuevos sombreadores, así que probablemente paso por alto lo obvio aquí. –
Muchos sombreadores de celdas posteriores a Jet Set Radio usan la posición de la cámara para detectar bordes definiendo un borde para ser la unión entre un borde orientado hacia adelante y un borde orientado hacia atrás. Obviamente no podrás usar uno de esos. Pero enfoques como Sobel y Laplacian buscan discontinuidades en el color en una imagen en 2D para detectar bordes, por lo que son totalmente apropiados. Probablemente sea inteligente leer los filtros de convolución, si aún no lo has hecho, entonces investiga el desenfoque laplaciano y gaussiano. He agregado un código de muestra ensamblado apresuradamente para este último. – Tommy
- 1. Shader para Android OpenGL ES
- 2. PowerVR SGX535 Shader Performance (OpenGL ES 2.0)
- 3. Mejores prácticas de OpenGL ES 2.0 Shader
- 4. Sugerencias para HLSL 2D shader tutorials?
- 5. Sombras paralelas OpenGL ES para sprites 2D
- 6. 2D API o OpenGL ES para un juego Android 2D?
- 7. Android OpenGL ES y 2D
- 8. Uso de OpenGL Toon Shader en GLSL
- 9. Opengl pixel perfect 2D drawing
- 10. Pasando own struct into opengl es 2.0 shader
- 11. Dibuje una imagen 2D usando OpenGL ES 2.0
- 12. Ejemplo 2D con OpenGL
- 13. OpenGL ejemplo 2d juego
- 14. Cómo cargar y mostrar imágenes en OpenGL ES para iphone
- 15. Representador gráfico vectorial 2D para OpenGL
- 16. OpenGL GLSL Shader: dibujar un círculo en un polígono plano
- 17. ¿Cómo volver a escribir la aplicación 2D OpenGL para OpenGL ES?
- 18. OpenGL ES y sombreadores compatibles con OpenGL
- 19. ¿Sugerencias para soporte de pantalla múltiple en 2D OpenGL?
- 20. Problema de compilación de OpenGL Shader - EOF inesperado
- 21. Opengl Geometry shader La búsqueda de textura de entero falla
- 22. Vertex shader vs Fragment Shader
- 23. ¿Cómo puedo encontrar una lista de todos los uniformes en OpenGL es 2.0 vertex shader pro
- 24. Convertir imágenes en 2D a modelos 3D
- 25. Full HD 2D Texture Memory OpenGL
- 26. OpenGL- Método simple de clipping/oclusión 2D?
- 27. Desactivar delinear permanentemente para VS2010 (C/C++)
- 28. WebGL Geometry Shader Equivalente?
- 29. C++/OpenGL convierte coords mundiales para coords de pantalla (2D)
- 30. Generic GLSL Lighting Shader
por lo que el resplandor que desea agregar es como una sombra paralela? –
Más de un trazo alrededor de la imagen que tendría bordes suaves. –