From MaratisWiki
Jump to: navigation, search



MString MObject3d::m_nameNone

MVector3 MObject3d::m_positionNone

MVector3 MObject3d::m_scaleNone

MQuaternion MObject3d::m_rotationNone

MMatrix4x4 MObject3d::m_matrixNone

vector<MObject3d *> MObject3d::m_childsNone

bool MObject3d::m_isActiveNone

bool MObject3d::m_isVisibleNone

bool MObject3d::m_needToUpdateNone

MObject3d* MObject3d::m_parentNone

vector<MBehavior *> MObject3d::m_behaviorsNone


virtual MObject3d::~MObject3d(void)

MObject3d::MObject3d(const MObject3d &object)

void MObject3d::updateMatrix(void)

void MObject3d::computeLocalMatrix(void)

MMatrix4x4* MObject3d::getMatrix(void)

void MObject3d::unlinkChilds(void)

void MObject3d::computeChildsMatrices(void)

MVector3 MObject3d::getUniformRotatedVector(const MVector3 &vector)

MVector3 MObject3d::getInverseRotatedVector(const MVector3 &vector) const

MVector3 MObject3d::getRotatedVector(const MVector3 &vector) const

MVector3 MObject3d::getInversePosition(const MVector3 &position) const

MVector3 MObject3d::getTransformedVector(const MVector3 &vector) const

void MObject3d::setPosition(const MVector3 &position)

MVector3 MObject3d::getTransformedPosition(void) const

MVector3 MObject3d::getPosition(void) const

void MObject3d::setEulerRotation(const MVector3 &euler)

void MObject3d::setAxisAngleRotation(const MVector3 &axis, float angle)

void MObject3d::addAxisAngleRotation(const MVector3 &axis, float angle)

void MObject3d::setRotation(const MQuaternion &rotation)

MVector3 MObject3d::getTransformedRotation(void) const

MVector3 MObject3d::getEulerRotation(void) const

MQuaternion MObject3d::getRotation(void) const

void MObject3d::setScale(const MVector3 &scale)

MVector3 MObject3d::getTransformedScale(void) const

MVector3 MObject3d::getScale(void) const

void MObject3d::linkTo(MObject3d *parent)

void MObject3d::unLink(void)

void MObject3d::setParent(MObject3d *object)

void MObject3d::addChild(MObject3d *child)

bool MObject3d::hasParent(void)

unsigned int MObject3d::getChildsNumber(void)

MObject3d* MObject3d::getParent(void)

MObject3d* MObject3d::getChild(unsigned int id)

void MObject3d::updateBehaviors(void)

void MObject3d::drawBehaviors(void)

void MObject3d::deleteBehavior(unsigned int id)

void MObject3d::invertBehavior(unsigned int idA, unsigned int idB)

void MObject3d::changeBehavior(unsigned int id, MBehavior *behavior)

void MObject3d::addBehavior(MBehavior *behavior)

unsigned int MObject3d::getBehaviorsNumber(void)

MBehavior* MObject3d::getBehavior(unsigned int id)

bool MObject3d::needToUpdate(void)

virtual void MObject3d::setActive(bool active)

bool MObject3d::isActive(void)

void MObject3d::setVisible(bool visible)

bool MObject3d::isVisible(void)

virtual void MObject3d::updateVisibility(MOCamera *camera)

void MObject3d::setName(const char *name)

const char* MObject3d::getName(void)

virtual int MObject3d::getType(void)

virtual void MObject3d::update(void)

void MObject3d::removeChild(MObject3d *child)

void MObject3d::clearObject3d(void)


MObject3d is a base object from which other important objects are derived (e.g. MOEntity, MOCamera, MOText). It allows basic operations like translation/rotation, parent/child linking, etc.

All its methods can be called from the derived object:


This works because MOCamera is derived from MObject3d which has the method setPosition(). Notice the derived objects has the O in the name for "Object3d" to suggest their base class (e.g. MOEntity).


Position simply tells where the object is in space coordinate (X, Y and Z). MVector3 is used to generate specific coordinate:

 MVector3 pos = MVector3(10,10,10); //pos is a point with coordinate 10,10,10
 camera->setPosition(pos); //a camera object is now set to the coordinates 10,10,10
 player->setPosition(MVector3(50,50,50)); //the player is set explicitly to position 50,50,50
 MVector3 point = camera->getPosition(); //get the position of the camera object and stores it in "point".


Every object is active by default. If you deactivate it, things like translation/rotation won't be updated in the next frames. More importantly, the linked physics object won't be updated. This means that deactivating an entity can save CPU time.

 entity->setActive(true); //activate the entity
 entity->setActive(false); //deactivate the entity
   //then make "enemy" attack the player
 if(! entity->isActive()) //if the entity is NOT active
   return; //exit this function/method
 //otherwise go on with the code:


Invisible objects can still be transformed and have an influence in the scene (e.g. physics).


When you have a pointer to an object but you don't know what the object is (e.g. when looping through a vector of objects), you can use getType().

MObject3D returns the M_OBJECT3D "identifier", but this is a virtual method which is overrided by the derived objects (e.g.MOEntity, MOCamera). So in the case of MOEntity, the object will return the M_OBJECT3D_ENTITY "identifier" so you can tell that you're working with a MOEntity object.

 unsigned int size = vector_of_objects.size();
 for(unsigned int i=0; i<size; i++)
     unsigned int id = (size-1)-i;
     if(vector_of_objects[id]->getType == M_OBJECT3D_ENTITY)
        printf("I've found an entity!\n");

The "identifiers" (M_OBJECT3D_ENTITY, M_OBJECT3D_CAMERA, etc.) are macro definitions and are defined in MEngine.h


This virtual method is empty and it will be overrided by the derived objects (e.g. MOEntity::update). It's called by MScene::update for every object.

Personal tools