Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Plataformas Moviles Donde Elipsoides

Iniciado por Pogacha, 25 de Agosto de 2005, 12:53:17 PM

« anterior - próximo »

Pogacha

 Que tal, tengo este problema que he venido pateando para despues pero ya resulta inminente resolverlo.

Como se implementan las Plataformas Moviles en un sistema de "fisica" por elipsoides como el HL o el Quake.

Probé con herencia padre-hijo pero no salio como queria.

Probé con física a pelo pero hay problemas ya que como uso metodos analiticos de detección de colisiones no me queda compatible ...

En ambos casos tendria que resolver un monton de singularidades, me gustaria saber como lo hacen comunmente otros motores ...

Se entiende que es lo mismo para 2d/3d ?

Y solo necesito transmición de traslación, la rotación no la uso.

Tiene que ser robusto, pues debe andar en amplitud de 6x del frame rate.

Saludos.

vicho

 no entiendo donde te da problemas pero si es lo que creo que es, es basicamente un problema de relatividad de galileo, ahora seria bueno(por lo menos creo)

que muestres a grandes rasgos como manejas la fisica, osea si manejas los movimientos usando simplemente cinematica o algo mas completo como dinamica.

y sobre el usar elipsoides y el metodo analitico. has pensado en usar una esfera y escalar el mundo??

Pogacha

 Claro, por ahí haiga una implementación clasica de plataformas moviles para elipsoides.
Citary sobre el usar elipsoides y el metodo analitico. has pensado en usar una esfera y escalar el mundo??
Uso escalamiento del mundo para que me quede una esfera, lo que quiero decir es que uso metodos analiticos para determinar la colision, partiendo de su posicion, velocidad e intervalo de tiempo, no por penetración.

Citarque muestres a grandes rasgos como manejas la fisica, osea si manejas los movimientos usando simplemente cinematica o algo mas completo como dinamica.
Quiero unicamente cinematica. El tema del momento lineal se lo saque todo por que en definitiva quedaba mal en el juego.

El sistema fisico mio es mas o menos:

struct TColision
{
 float delta_tiempo;
 Vector Posicion, Normal;
 float Friccion, Restitucion;
 void  Vaciar(float delta_tiempo);
};

class TObjetoFisico
{
   bool CaidaLibre;
   bool Congelable;
   Vector Posicion, Velocidad;
   float Friccion, Restitucion;
 public:
   virtual void Actualizar(float delta_tiempo); // se generan las fuerzas internas
   virtual void DeterminarContacto(TObjetoFisico *o, TColision &c); // si hay colision actualiza los datos de C
   virtual void Integrar(TColision &c, float delta_tiempo);  
};

class TElipsoide : public TObjetoFisico
{
 Vector Escala;
    public:
 virtual void Actualizar(float delta_tiempo); // se generan las fuerzas internas
 virtual void Colision(TObjetoFisico *o, TColision &c); // si hay colision en tiempo menor actualiza los datos de C
 virtual void Integrar(TColision &c, float delta_tiempo);   // este delta lo requiere para calcular la friccion
}

void TMapa::RespuestaAFisica(float delta_tiempo)
{
  for(int i=0; i<n_Objetos; i++) Objetos[i]->Actualizar(delta_tiempo);

  for(i=0; i<n_Objetos; i++)
  {
    float t=delta_tiempo;
    while(t<=0.0f)
    {
      TColision Colision;
      Colision.Vaciar(t);
       for(j=0; j<n_Objetos; j++)
         Objetos[i]->Colision( Objetos[j], Colision);

       Objetos[i]->Integrar(Colision, t);
        t-=Colision.delta_tiempo;
    }
  }
}


Las plataformas no responden a colision, su movimiento es independiente del mundo.

Supongo que la solución a mi problema no me la dará nadie, lo que en realidad busco es algo ya hecho donde ir a espiar el como, pero el codigo del quake y demas no son el mejor lugar para ir a ver, tal vez alguíen conozca alguna implementación de alguíen o la halla hecho el mismo sobre este tema ...

Con el metodo de la herencia deberia tener los vectores VelocidadReal y  VelocidadRelativa pero debo cambiar todo los metodos, ¿ es este el camino o debo sino usar un impulso arbitrario como respuesta a la colision sobre la plataforma?

Saludos y gracias.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.