Dibujo acelerado por hardware de formas curvas

11

¿Cómo dibujar rápidamente una forma curva?

  • "rápidamente" supongo que uno debe usar las instalaciones de hardware tanto como sea posible

  • por "curva" me refiero a los límites definidos por curvas de Bezier cuadráticas o cúbicas

  • por "forma" me refiero a un trazo "grueso" (es decir, de más de 1 px de ancho) o un "polígono curvo 2D" con relleno par-impar / distinto de cero, posiblemente con agujeros (es decir, letra "O")

Estoy preguntando porque las opciones que conozco tienen varios inconvenientes:

  • triangular la forma y enviarla a OpenGL: realiza el trabajo más difícil en la CPU y puede usar demasiados / pocos triángulos (es decir, derrochador / grueso)

  • Atlas de texturas: tiene que volver a calcular / cargar la textura en cada cambio (forma, escala, rotación, ...)

  • Campo de distancia firmado: a gran escala, los detalles no se ven bonitos o tienen que volver a calcular / cargar la textura

  • NV_path_rendering: podría serlo si no funcionara solo en las tarjetas de Nvidia

  • OpenVG: podría serlo si no funcionara solo en dispositivos móviles

  • ?


* Me parece que OpenVG no avanza exactamente, por decirlo suavemente. ¿Alguien sabe algo sobre sus perspectivas de futuro? ¿Vale la pena vigilar en la actualidad?

** OpenGL 4+ proporciona medios de teselación de polígonos sobre la marcha. ¿Podría usarse de alguna manera para refinar la malla desde la opción de "triangulación" para que el límite de la forma al menos no parezca "en ángulo"?

Ecir Hana
fuente
2
Este artículo GPU Gems rasterizes curvas cuadráticas mediante la identificación de las partes del casco que se curvan y analíticamente el cálculo de la cobertura en el sombreado de píxeles, podría valer la pena un vistazo: developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch25.html
yuriks
2
@yuriks Sí, Loop & Blinn, lo olvidé por completo. ¿Pero no está patentado?
Ecir Hana
Ver también Gráficos vectoriales
masivamente
Entre las opciones que ha enumerado en su pregunta y el papel Loop y Blinn, creo que ha agotado todas las posibilidades.
Nathan Reed
Puede teselar una línea, como se describe aquí . O puede triangular en un sombreador de cálculo.
nikitablack

Respuestas:

2

Puede usar sombreadores de teselación OpenGl 4.x para convertir los puntos de control de Bezier en polígonos.

Una búsqueda en Google para "Tessellation Shader Bezier" encontró este esquema que describe la teselación de las superficies y curvas de Bezier:

http://web.engr.oregonstate.edu/~mjb/cs519/Handouts/tessellation.1pp.pdf

Esto descarga la evaluación Bezier de la CPU a la GPU y reduce el flujo de datos a través del bus.

atb
fuente
3
Podría mejorar esta respuesta elaborando un poco, o incluso simplemente vinculando a algo que explique más.
Nathan Reed
1
Una forma de expandir esta respuesta sería abordar los inconvenientes que menciona el autor y explicar cómo su enfoque ayuda con ellos.
Trichoplax
0

Se puede hacer dibujo curvo con hardware. Hay un método descrito en GPU Gems 3 que describe cómo hacer esto. El usuario @yuriks realmente comenta esto. De hecho, he hecho una demostración rápida y sucia para que la veas.

curva

Imagen 1 : Forma de curva acelerada HW (dibujada con un triángulo) y fuente webgl

joojaa
fuente