Pregunta

Estoy pensando en el desenfoque de movimiento de sujeción en mi programa 2D, pero dudo que los resultados de mi algoritmo actual.

Mi enfoque se parece a esto en el momento:

  • Dibujar a backbuffer.
  • Cuando el tiempo de actualizar búfer frontal, mezclar el backbuffer sobre el tope frontal.
  • Repetir

¿Qué causa el efecto "desenfoque de movimiento" es, obviamente, la mezcla, como objetos en movimiento dejará un rastro de la decoloración.

Esto es claramente no es muy exigente con el hardware, el doble buffer se llevará a cabo de todos modos y el único paso adicional es la mezcla alfa, que es un cálculo simple. Sin embargo, los caminos serán muy buen filo y no borrosa en todo lo que pueden las miradas un poco extraño. Que podía hacer un borrón caja en el búfer de reserva antes de la etapa de mezcla, pero se siente como que podría ser muy exigente en los sistemas de gama baja como la Nintendo DS.

¿Hay soluciones que permitan hacerlo de manera más eficiente o producir un resultado mejor aspecto?

¿Fue útil?

Solución

En serio que debe hacer muchos cuadros intermedios y se mezclan en un resultado. Digamos, por ejemplo, que su frecuencia de la salida es de 50 fps. Es probable que se obtendría un resultado razonable si renderizó internamente a 500 fps y grupos mezclados de diez marcos juntos antes de mostrar que para el usuario.

El enfoque que está utilizando en el momento simula persistencia, como si estuviera rindiendo a un viejo CRT con fósforo lento. Esto no es realmente lo mismo que el desenfoque de movimiento. Si su duración de trama es de 20 ms (1000-1050), entonces un marco de movimiento borrosa consiste en representaciones que abarcan la duración de una trama de 20 ms, todos con la misma ponderación alfa. La solución consiste en la persistencia de representaciones 20, 40, 60, 80, 100 ms atrás, desapareciendo gradualmente.

Otros consejos

No hay forma real de hacerlo más eficiente que yo sepa. Eso es aproximadamente tan eficiente como se pone. Se ve bastante bien, si la velocidad de fotogramas es buena y el movimiento no es demasiado fuerte también.

El mejor plan busca sería, para cada píxel, trazar una línea semi-transparente de la nueva posición a la posición anterior. Sin embargo, esto no es un cálculo trivial.

Puede que no sea muy fuerte en absoluto. Todo depende de la función de fusión utilizado. Por ejemplo 0.1 / 0.9 para una imagen anterior / corriente respectivamente proporcionará una débil rastro.

Podría añadir que se trata fundamentalmente de cómo se realiza el desenfoque de movimiento en OpenGL (a través de buffer de acumulación)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top