Tipos públicos | Métodos públicos | Métodos públicos estáticos | Atributos protegidos

Referencia de la Clase Shape

Clase abstracta que modela formas básicas, proporciona tests de colisión para dichas formas. Más...

#include <shape.h>

Diagrama de herencias de Shape
Inheritance graph
[significado de colores y flechas]

Lista de todos los miembros.

Tipos públicos

enum  Type { SPHERE = 1, AABB = 2, PLANE = 3 }

Métodos públicos

 Shape (const Ogre::String &name="")
virtual ~Shape ()
const Ogre::String & getName () const
virtual int getType () const =0
virtual void applyTransform (Shape *localShape, const Ogre::Vector3 &traslation=Ogre::Vector3::ZERO, const Ogre::Vector3 &scale=Ogre::Vector3::UNIT_SCALE, const Ogre::Quaternion &orientation=Ogre::Quaternion::IDENTITY)=0
virtual ShapegetTransformedCopy (const Ogre::Vector3 &traslation=Ogre::Vector3::ZERO, const Ogre::Vector3 &scale=Ogre::Vector3::UNIT_SCALE, const Ogre::Quaternion &orientation=Ogre::Quaternion::IDENTITY)=0

Métodos públicos estáticos

static void configureCollisionDispatching ()
static bool getCollision (Shape *shapeA, Shape *shapeB)

Atributos protegidos

Ogre::String _name

Descripción detallada

Clase abstracta que modela formas básicas, proporciona tests de colisión para dichas formas.

Autor:
David Saltares Márquez
Fecha:
25-01-2011

Shape es una clase virtual pura que modela el concepto de forma: esfera, plano, AABB, OBB...

Las formas compondrán los cuerpos (clase Body). Un objeto del juego está compuesto por una lista de formas y una matriz de transformación.

Es la encargada del collision dispatching. Dados dos punteros a dos formas se encarga de seleccionar el método que comprueba la colisión entre ambas según su clase concreta. Cada tipo de forma cuenta con un identificador y la clase Shape lleva internamente una tabla que relaciona dos tipos de formas con el método que detecta colisiones entre ellos. Por supuesto, debe haber una función para los tipos dados, en caso contrario se produce un error.

Tipos de formas y colisiones implementadas:

Ejemplo de uso:

  // Preparamos la tabla del collision dispatching
  Shape::configureCollisionDispatching();
  
  // Creamos dos formas    
  Sphere* sphereA = new Sphere("sphereA", Ogre::Vector3(0, 0, 0), 5.0);
  Sphere* sphereB = new Sphere("sphereB", Ogre::Vector3(1, 1, 1), 2.1);
  
  // Comprobamos colisiones entre las formas
  if (Shape::getCollision(sphereA, sphereB))
      cout << sphereA->getName() << " ha colisionado con " << sphereB->getName() << endl;

Documentación de las enumeraciones miembro de la clase

Tipos de formas

Valores de enumeraciones:
SPHERE 
AABB 
PLANE 

Documentación del constructor y destructor

Shape::Shape ( const Ogre::String &  name = ""  ) 

Constructor

Parámetros:
name nombre de la forma

No puede llamarse directamente ya que es una clase abstracta. Crea una forma con el nombre dado.

Shape::~Shape (  )  [virtual]

Destructor


Documentación de las funciones miembro

virtual void Shape::applyTransform ( Shape localShape,
const Ogre::Vector3 &  traslation = Ogre::Vector3::ZERO,
const Ogre::Vector3 &  scale = Ogre::Vector3::UNIT_SCALE,
const Ogre::Quaternion &  orientation = Ogre::Quaternion::IDENTITY 
) [pure virtual]
Parámetros:
localShape shape en local space a partir de la cual de aplica la transformación. Es imprescindible las dos shapes sean del mismo tipo.
position distancia con respecto al origen en world space
scale tamaño a aplicar
orientation rotación a aplicar

La forma ahora será la localShape transformada a partir del resto de parámetros. Cada clase Shape debe implementar este método. Las shapes deben ser del mismo tipo, en otro caso, el resultado es indeterminado. La transformación no se puede deshacer.

Implementado en Sphere, AxisAlignedBox y Plane.

void Shape::configureCollisionDispatching (  )  [static]

Construye la tabla que relaciona dos clases concretas de formas con un método que hace la comprobación de colisiones. Es necesario llamar a este método antes de comprobar cualquier tipo de colisión. La clase CollisionManager debería ser la que llame a este método.

bool Shape::getCollision ( Shape shapeA,
Shape shapeB 
) [static]
Parámetros:
shapeA forma A
shapeB forma B
Devuelve:
true si existe colisión entre A y B, false en caso contrario.

Recibe dos formas de un tipo indeterminado y devuelve si existe colisión entre ambas. Si no existe un método que gestione la colisión entre los tipos concretos de formas dadas se devuelve falso y se avisa del problema.

const Ogre::String & Shape::getName (  )  const
Devuelve:
nombre de la forma
virtual Shape* Shape::getTransformedCopy ( const Ogre::Vector3 &  traslation = Ogre::Vector3::ZERO,
const Ogre::Vector3 &  scale = Ogre::Vector3::UNIT_SCALE,
const Ogre::Quaternion &  orientation = Ogre::Quaternion::IDENTITY 
) [pure virtual]
Parámetros:
traslation desplazamiento a aplicar
scale escala de la forma
orientation orientación de la forma
Devuelve:
una copia de la forma transformada según los parámetros pasados. Se reserva memoria con new, no es conveniente abusar de esta función. El usuario del método es responsable de liberar la memoria de la nueva forma.

Implementado en Sphere, AxisAlignedBox y Plane.

virtual int Shape::getType (  )  const [pure virtual]
Devuelve:
tipo de la forma

Cada clase que herede de Shape debe implementar este método devolviendo el valor correspondiente del enumerado.

Implementado en Sphere, AxisAlignedBox y Plane.


Documentación de los datos miembro

Ogre::String Shape::_name [protected]

La documentación para esta clase fue generada a partir de los siguientes ficheros: