2011-09-22 17 views
6

Estoy usando con éxito el ruido Perlin para generar terreno, nubes y algunas otras cosas ingeniosas. Sin embargo, ahora estoy tratando de animar a un grupo de insectos voladores (específicamente luciérnagas), y me sugirieron usar el ruido de Perlin para esto también. Sin embargo, no estoy muy seguro de cómo hacerlo.¿Ruido de Perlin para el movimiento?

Lo primero que se me ocurrió fue, dado un mapa de ruido de este modo:

  1. Asignar cada luciérnaga una ubicación inicial aleatoria, velocidad y aceleración angular.
  2. En el marco, avance la posición de la mosca siguiendo su vector de dirección.
  3. Lea el mapa de ruido en la nueva ubicación, y úselo para ajustar la aceleración angular, causando que la mosca "gire" hacia píxeles más claros.
  4. Ajuste la aceleración angular de nuevo por la proximidad de otras moscas para evitar que se agrupen alrededor de los máximos locales.

Sin embargo, esto no cubre los casos en que las moscas alcanzan el borde del mapa, o los casos en los que pueden terminar simplemente orbitando un solo punto. El segundo caso podría no ser un gran problema, pero no estoy seguro de una forma confiable de que se vuelvan para evitar colisiones con el borde del mapa.

Sugerencias? Tutoriales o documentos (en inglés, por favor)?

Respuesta

6

Aquí hay una muy buena fuente para el ruido 2D perlin. Puede seguir exactamente los mismos principios, pero en lugar de crear una cuadrícula 2D de degradados, puede crear una matriz 1D de degradados. Puede usar esto para crear su ruido para un eje particular.

Simplemente siga esta receta, y puede crear funciones similares de ruido perlin para cada uno de sus otros ejes también. Combina estos movimientos, y deberías tener un buen sonido en tus manos. (También puede utilizar estas funciones de ruido como accellerations azar o velocidades. Dado que la función de ruido Perlin es globalmente monótona, sus moscas no se disparará fuera a distancias locos.)

http://webstaff.itn.liu.se/~stegu/TNM022-2005/perlinnoiselinks/perlin-noise-math-faq.html

Si eres curioso acerca de otros tipos de movimiento, sugeriría Brownian Motion. Ese es el mismo tipo de movimiento que las partículas de polvo exhiben cuando están flotando alrededor de su habitación. Este artículo entra en algunas matemáticas más interesantes al final, pero si eres familliar con Matlab, los primeros conjuntos de instrucciones deberían ser bastante fáciles de entender. Si no, solo busca en google las funciones, y encuentra sus equivalentes nativos para tu entorno (¡o créelos tú mismo!) Este será un poco más realista, y mucho más rápido de calcular que el ruido Perlin

http://lben.epfl.ch/files/content/sites/lben/files/users/179705/Simulating%20Brownian%20Motion.pdf

vuelo feliz!

+0

Ese momento incómodo cuando respondes una pregunta de hace un año. – Peaches491

+0

Es una buena respuesta, sin embargo. Mejor de lo que terminé haciendo, y será útil en el futuro. Gracias. –

1

¿Quizás estás buscando boids?

Wikipedia page

No aparece ruido Perlin en el concepto original, tal vez usted podría utilizar el ruido para generar atractores o repulsores, ya que estamos tratando de hacer con el comportamiento 'volar a más ligero'.

PD: la página enlazada arriba tiene un enlace relacionado al Firefly algorithm, ¿quizás le interese eso?

+0

Vi el algoritmo firefly (muy bien nombrado para facilitar la búsqueda en Google), pero también estaba buscando algo menos específico para la luciérnaga. Echaré un vistazo a boids. –

+0

Es realmente genial para hacer cualquier tipo de simulación de bandada, ya sean aves, peces, etc., si desea evitar una colisión. Si quieres algo que se sienta caótico, es decir, no todos los elementos tendientes a una dirección unificada, puedes establecer que anules la influencia de la fuerza de "cohesión". – jv42