PAL: Interface Abstracta para Motores de Física

11 Nov, 2007  |  Escrito por ralbornoz  |  en Desarrollo Videojuegos, Engines

PAL (Physics Abstract Layer) es una inteface que unifica varios de los motores de física usados hoy en día. Gracias a una API en C++ podremos crear videojuegos o simulaciones, con una interfaz común e independiente del motor físico.


En la página se puede ver un ejemplo para comprender como funciona esta API, la cual es bastante intuitiva.

El siguiente código corresponde a la simulación de una caja (cubo) que cae al suelo (terreno).

CODE:
  1. #include <stdio.h>
  2. #include "palFactory.h"  // Incluye biblioteca PAL physics
  3.  
  4.  
  5. int main(int argc, char **argv)
  6. {
  7.     PF->LoadPALfromDLL(); // Carga DLL de PAL
  8.  
  9.     // Se usará motor de física "Bullet"
  10.     PF->SelectEngine("Bullet");
  11.    
  12.     // Crea objeto para la física
  13.     palPhysics *pp = PF->CreatePhysics();
  14.    
  15.     if (pp == NULL)
  16.     {
  17.         printf("Error al crear motor de física\n.");
  18.         return 0;
  19.     }
  20.    
  21.     // Inicializa motor y define vector gravedad
  22.     pp->Init(0,-9.8f,0);
  23.  
  24.     // Crea un terreno
  25.     palTerrainPlane *pt= PF->CreateTerrainPlane();
  26.  
  27.     // Lo inicializa en la posición (0,0,0)
  28.     // con un tamaño de 50x50 unidades
  29.     pt->Init(0,0,0, 50.0f);
  30.  
  31.     // Crea una caja (cubo)
  32.     palBox *pb = PF->CreateBox();
  33.  
  34.     // Se inicializa en la posición (0,5,0)
  35.     // (5 unidades sobre el terreno, en el aire)
  36.     // Define las dimensiones a 1x1x1 con una masa de 1
  37.     pb->Init(0,5,0, 1,1,1, 1);
  38.    
  39.     // 100 ciclos para la simulación
  40.     for (int i=0; i <100; i++) 
  41.     {
  42.         // Actualiza el motor de física con
  43.         // un timestep de 0.02
  44.         pp->Update(0.02f);
  45.  
  46.         palVector3 pos;
  47.         // Obtiene la posición de la caja
  48.         // (se almacena en el vector pos)
  49.         pb->GetPosition(pos);
  50.  
  51.         printf("La posición actual de la caja es %6.5f en el tiempo %4.2f\n",
  52.         pos.y, pp->GetTime());
  53.     }
  54.    
  55.     // Se limpia motor de física
  56.     PF->Cleanup();
  57. }

Los motores de física soportados actualmente son los siguientes:

Enlaces de interés sobre PAL:

Comparte este Post:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • email
  • FriendFeed
  • Live
  • PDF
  • Ping.fm
  • RSS
  • Technorati
  • Tumblr
  • Twitter
  • LinkedIn
«
»

3 Comentarios | Comentar ahora

  1. BONE  |  Noviembre 13th, 2007 at 4:12 pm #

    hola hola sabes como puedo instalar el physics esque me marca errores :S como lo puedo instalar
    GRACIAS.

    BONE - Gravatar
  2. BONE  |  Noviembre 13th, 2007 at 4:13 pm #

    bullet physics

    BONE - Gravatar
  3. Madster  |  Noviembre 18th, 2007 at 5:52 pm #

    hey! excelente!

    pero ¿es un mínimo común denominador? me pregunto si esto dará para benchmarks.

    Madster - Gravatar

Deja tu comentario

XHTML: Puedes usar las siguientes etiquetas (tags): <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>