Mover un objeto a lo largo de una curva mientras lo gira


11

Me gustaría mover un objeto a lo largo de una curva . En determinados puntos de la curva, deseo que el objeto cambie de velocidad y gire a lo largo de su eje.

Imagine un avión volando a un destino. Tiene su camino que debe seguir, además, ajusta su velocidad y orientación todo el camino (rumbo, médula, banco).

¿Podría solicitar amablemente información de inicio sobre lo siguiente:

  • Qué tipo de curvas usar para interpolar suavemente un objeto
  • Qué fórmulas usar para una interpolación confiable, donde podría controlar la velocidad del movimiento del objeto, y la transición entre nudos curvos sería perfecta
  • Qué información debe exportarse desde una aplicación de autoría 3D
  • ¿Debo usar quaternions slerp () para esto?

Si conoce un libro que cubra este tema de manera eficiente , eso sería de gran ayuda. Gracias.

Respuestas:


7

Para la curva de movimiento, sugeriría usar curvas de Hermite. Simplemente da un punto / velocidad inicial y un punto / velocidad final, y crea una curva agradable y suave entre esos dos. Utilice el punto final / velocidad del primer par de puntos como punto inicial / velocidad del siguiente par de puntos y tendrá una curva larga y sinuosa que es perfecta.

Esto maneja perfectamente el requisito de administrar la velocidad: proporciona una lista de puntos en el tiempo con las velocidades que elija, y le brinda los valores de posición y velocidad interpolados sin problemas. Si desea seguir con esto, todo lo que necesita extraer de la aplicación de autoría 3D son puntos y velocidades en el camino que desee. También puede generarlos en tiempo de ejecución, tal vez en función de la entrada del usuario.

Para ajustar la orientación, tiene varias opciones. Si el avión siempre apuntará hacia dónde va (que es el caso que tiene sentido), puede usar el vector de velocidad interpolado de la curva de Hermite para encontrar hacia dónde debe apuntar su barco. Si conoce el vector hacia arriba (se mueve en un plano, o sabe en qué dirección debería estar hacia arriba), puede calcular el tercer eje mediante una cruz (frente, arriba) y allí tiene su orientación.

Si desea una orientación "tambaleante" de alguna manera para que el avión a veces se desvíe de la dirección frontal en la ruta, puede utilizar la dirección frontal como la dirección deseada, y sucesivamente hacer un slerp de un paso entre la orientación actual y la orientación deseada.

Si desea orientaciones personalizadas que no tienen nada que ver con la ruta, puede proporcionar una lista de cuaterniones de orientación para esto. Entonces tus puntos se vuelven (punto, velocidad, cuaternión). Luego puede usar slerp entre dos cuaterniones sucesivos para establecer sus orientaciones en el camino. No olvide que slerp es un método de interpolación lineal . Sin embargo, generalmente debería estar bien. Si encuentra que las rotaciones no son lo suficientemente suaves en las costuras, puede intentar interpolar la lista de cuaterniones con una curva de Bezier, como se explica aquí en la sección 7.

Aquí hay un código fuente que puede ayudarlo a comenzar. Tiene una serie de técnicas de interpolación fluidas para una lista de cuaterniones (escuadrón, bezier, etc.).

¡Hazme saber si tienes alguna pregunta!


+1 - Gracias, tu respuesta básicamente cubre todo. Responde a todas las preguntas que hice, además, proporciona más material para estudiar. Ahora, tengo suficiente material para empezar. Por lo tanto, no veo ninguna razón, no para marcar esto como la respuesta aceptada .
Bunkai.Satori

@ Bunkai.Satori gracias, me alegro de poder ayudarte :) Me encantaría ver lo que creas al final.
Gazihan Alankus
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.