Sion Tower (demo técnica) 0.1
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
AxisAlignedBox OrientedBox Plane Sphere

Lista de todos los miembros.

Tipos públicos

enum  Type { SPHERE = 1, AABB = 2, PLANE = 3, OBB = 4 }
typedef boost::function< bool(Shape
*, Shape *) 
CollisionCheckFunction )

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 void addCollisionTest (CollisionCheckFunction test, int typeA, int typeB)
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 los 'Typedef' miembros de la clase

typedef boost::function<bool(Shape*, Shape*) Shape::CollisionCheckFunction)

Test de colisión entre dos tipos de formas. Objeto función de boost que recibe dos punteros a Shape y devuelve bool.


Documentación de las enumeraciones miembro de la clase

Tipos de formas


Documentación del constructor y destructor

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

Constructor

Parámetros:
namenombre 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

void Shape::addCollisionTest ( CollisionCheckFunction  test,
int  typeA,
int  typeB 
) [static]
Parámetros:
testobjeto función de boost que recibe dos punteros a Shape y devuelve bool. Test de colisión entre las dos formas.
typeAtipo de la primera forma.
typeBtipo de la segunda forma.

Añade un test de colisión entre dos tipos de formas. Si ya existía uno para dicha combinación de formas, se sobreescribe. Sólo es necesario llamar al método una vez por cada pareja de formas. Internamente ya hace que el test sea recíproco (A-B y B-A).

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:
localShapeshape en local space a partir de la cual de aplica la transformación. Es imprescindible las dos shapes sean del mismo tipo.
positiondistancia con respecto al origen en world space
scaletamaño a aplicar
orientationrotació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, Plane y OrientedBox.

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:
shapeAforma A
shapeBforma 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:
traslationdesplazamiento a aplicar
scaleescala de la forma
orientationorientació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, Plane y OrientedBox.

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, Plane y OrientedBox.


La documentación para esta clase fue generada a partir de los siguientes ficheros:
 Todo Clases Archivos Funciones 'typedefs' Enumeraciones