Wiki

Clone wiki

Re:Enginicus2 / objects_ru

Объекты

В движке существует такое понятие как объекты, под этим понятием определенно все, что можно поместить на сцену. Что бы создать свой объект, нужно класс, который будет описывать будущий объект унаследовать от IObject. Объекты движка могут быть привязаны к узлам сцены и подвергнуты трансформации (поворот, перемещение, изменение размера). При этом узел сцены известит привязанный к нему объект о трансформации. Объекты могут содержать геометрию, которая будет выводиться на сцене или не содержать её, например источники освещения, камеры и.т.д.

Пример описания класса не содержащего геометрию:

class ILight : public IObject
{
};


Если объект должен содержать геометрию, то надо переопределить метод isGeometry():

class IModel : public IObject
{
   bool isGeometry() { return true; }
};


Когда объект привязываю к узлу сцены, то объект получает уведомление onAttach(INode* node), если в этой функции вернуть false, то объект не будет привязан к узлу сцены, по умолчанию возвращается true:

class IModel : public IObject
{
   bool isGeometry() { return true; }
   bool onAttach(INode*);
};


Так же объект получает уведомление onDetach(INode*), когда убирают привязку к узлу узлу сцены:

class IModel : public IObject
{
   bool isGeometry() { return true; }
   bool onAttach(INode*);
   void onDetach(INode*);
};


При трансформации узла сцены, объект получает уведомления об этом:

class IModel : public IObject
{
   bool isGeometry() { return true; }
   bool onAttach(INode*);
   Vector3D onRotate(float x, float y, float z, bool skip_child);
   Vector3D onMove(float x, float y, float z, bool skip_child);
   Vector3D onScale(float x, float y, float z);
   Matrix onLocalTMSet(const Matrix* matrix);
   Matrix onWorldTMSet(const Matrix* matrix);
};


Updated