Oxygen Engine
Modern C++ 3D Engine using OpenGL
Loading...
Searching...
No Matches
oe::scene::Node Class Reference

#include <OxygenEngine/scene/node.h>

Inheritance diagram for oe::scene::Node:
[legend]
Collaboration diagram for oe::scene::Node:
[legend]

Public Member Functions

const NodegetParentNode () const noexcept
 
NodegetParentNode () noexcept
 
ManagergetSceneManager ()
 
void addChild (Node &child)
 
const std::vector< oe::scene::Node * > & getChildren () noexcept
 
const std::vector< oe::scene::Node * > & getChildren () const noexcept
 
void setParent (Node &parent) noexcept
 Change the parent of this node.
 
void moveToRoot () noexcept
 Detach the node from parent to make a root node.
 
void foreachChildren (void(*func)(Node &, void *), const bool recursion=false, void *user_data=nullptr)
 Do actions on children.
 
void foreachChildren (std::function< void(Node &)> func, const bool recursion=false)
 Do actions on children.
 
const std::string getAbsoluteName (const std::string &separator="/") const noexcept
 Get absolute name (from the hierarchy)
 
template<typename T = Node>
T * search (const std::string path, const std::string separator="/")
 Search for a node among children using a name path.
 
bool isVisible () const
 
void setVisible (const bool &is_visible=true)
 
bool canRender (const scene::Camera &camera) const
 
const AABBgetBoundingBox () const
 Recompute and return bounding box from raw AABB.
 
const AABB getEnglobingBoundingBox () const
 Compute englobing bounding box including all children ones.
 
std::vector< Node * > getAllParents () const
 Get all node parents hierarchy of the node.
 
Transform getAbsoluteTransform () const
 Get Node transform relative from world origin.
 
glm::vec3 getAbsolutePosition () const
 Get Node position from world origin.
 
const glm::mat4 & getAbsoluteModelMatrix () const
 Get absolute model matrix (by taking the parents into account)
 
const glm::mat4 getAbsoluteInverseModelMatrix () const
 Get absolute inverse model matrix (by taking the parents into account)
 
glm::quat getRotationNeededToLookAt (const glm::vec3 &target, const glm::vec3 &up=glm::vec3(0.f, 1.f, 0.f)) const
 Get the rotation needed to orient the node at a specified target.
 
void lookAt (const glm::vec3 &target, const glm::vec3 &up=glm::vec3(0.f, 1.f, 0.f))
 Orient the node to stare at a specified target.
 
virtual void update (const double &delta, const int8_t flags=0)
 Update the node.
 
void generateModel (const bool recursive=true) const
 Force regeneration of Models Matrices.
 
- Public Member Functions inherited from oe::scene::Transform
 Transform (const glm::vec3 &translation=glm::vec3(0.f), const glm::quat &rotation=glm::quat(1.f, 0.f, 0.f, 0.f), const glm::vec3 &scale=glm::vec3(1.f), const glm::vec3 &skew=glm::vec3(0.f), const glm::vec4 &perspective=glm::vec4(glm::vec3(0.f), 1.f))
 Generate Transform from its translation, rotation, scale values.
 
 Transform (const glm::mat4 &model)
 Generate Transform from a model matrix.
 
const glm::vec3 & getTranslation () const
 Get Translation component value of the transform.
 
const glm::vec3 & getPosition () const
 Get Translation component value of the transform.
 
const glm::quat & getRotation () const
 Get Rotation component value of the transform.
 
const glm::vec3 & getScale () const
 Get Scaling component value of the transform.
 
const glm::vec3 & getSkew () const
 Get Skew component value of the transform.
 
const glm::vec4 & getPerspective () const
 get Perspective component value of the transform
 
void setTranslation (const float x, const float y, const float z)
 Translate to the specified position, filled component wise.
 
void setPosition (const glm::vec3 &position)
 Translate to the specified position.
 
void setPosition (const float x, const float y, const float z)
 Translate to the specified position.
 
void setRotation (const float x, const float y, const float z)
 Set rotation from Euler angles.
 
void setRotation (const lit::Angle &x, const lit::Angle &y, const lit::Angle &z)
 Relatively rotate the transform using a lit::Angle triad.
 
void setScale (const float x, const float y, const float z)
 Set scaling.
 
void relativeTranslate (const glm::vec3 &translation)
 Translate the transform from current position.
 
void relativeTranslate (const float x, const float y, const float z)
 Translate the transform from current position, component wise.
 
void loadFromModel (const glm::mat4 &model)
 Fill the transform from a model matrix.
 
void relativeMove (const glm::vec3 &translation)
 Move the transform relative to current translation.
 
void relativeRotate (const glm::quat &quaternion)
 Rotate the transform relative to current rotation.
 
void relativeRotate (const float x, const float y, const float z)
 Rotate the transform from Euler angles (component wise)
 
void relativeRotate (const lit::Angle &x, const lit::Angle &y, const lit::Angle &z)
 Relatively rotate the transform using a lit::Angle triad.
 
void relativeScale (const glm::vec3 &scale)
 Multiply current scale by the new one.
 
void setSkew (const glm::vec3 &skew)
 Set skew of the transform.
 
void setPerspective (const glm::vec4 &perspective)
 Set perspective effect of the transform.
 
void interpolateWith (const float ratio, const Transform &target)
 Interpolate this transform with another one.
 
void fillFrom (const Transform &transform)
 Fill current values from another transform.
 
template<TranslationType T>
void setTranslation (const T &translation)
 Translate to the specified position.
 
template<RotationType R>
void setRotation (const R &rotation)
 Get rotation quaternion from a generic type.
 
template<ScaleType S>
void setScale (const S &scale)
 Set scale vector from a generic type.
 
template<TranslationType T>
void getTranslationAs (T &result) const
 Get translation vector and fill in generic type.
 
template<RotationType R>
void getRotationAs (R &result) const
 Get rotation quaternion and fill in generic type.
 
template<ScaleType S>
void getScaleAs (S &result) const
 Get scale vector and fill in generic type.
 
glm::mat4 getModelMatrix () const
 Generate a Model matrix from the transform.
 
bool isDirty () const
 Check if something modified this transform.
 
- Public Member Functions inherited from oe::component::HasComponents< Node, NodeComponent >
 HasComponents (Node &entity)
 
ComponentList< Node, NodeComponent > & getComponents () noexcept
 Get components bound to the entity.
 
const ComponentList< Node, NodeComponent > & getComponents () const noexcept
 Get components bound to the entity.
 
std::shared_ptr< T > addComponent (Args &&... args)
 Add a new a component.
 
std::shared_ptr< T > addNamedComponent (const std::string &name, Args &&... args)
 Add a new a component.
 
void removeComponent (const std::string &name)
 Remove a component.
 
const T * getComponentByType () const noexcept
 Fetch a component by its type.
 
T * getComponentByType () noexcept
 Fetch a component by its type.
 
T * getComponentByName (const std::string &name) noexcept
 Fetch a component when you know its name.
 
const T * getComponentByName (const std::string &name) const noexcept
 Fetch a component when you know its name.
 

Public Attributes

std::string name = ""
 Name, used as identifier for search.
 
AABB raw_aabb
 Raw bounding box (ie. without taking node transform)
 

Protected Attributes

AABB _aabb
 
- Protected Attributes inherited from oe::component::HasComponents< Node, NodeComponent >
ComponentList< Node, NodeComponent > _components
 

Friends

class Manager
 

Additional Inherited Members

- Protected Member Functions inherited from oe::scene::Transform
void forceDirty (const bool is_dirty) const
 Set custom dirty status.
 

Detailed Description

Scene node

Member Function Documentation

◆ foreachChildren()

void oe::scene::Node::foreachChildren ( std::function< void(Node &)>  func,
const bool  recursion = false 
)

Do actions on children.

Note
same as above but with a lambda, might be slower

◆ generateModel()

void oe::scene::Node::generateModel ( const bool  recursive = true) const

Force regeneration of Models Matrices.

Parameters
recursiveRun computations of all children

◆ getAbsoluteInverseModelMatrix()

const glm::mat4 oe::scene::Node::getAbsoluteInverseModelMatrix ( ) const

Get absolute inverse model matrix (by taking the parents into account)

This matrix let you fill a transform that will convert world space coordinates to local node ones

Note
Can be used for physics or for changing node hierarchy without changing their Transform

◆ getAllParents()

std::vector< Node * > oe::scene::Node::getAllParents ( ) const

Get all node parents hierarchy of the node.

Returns
first element is direct parent, second element is parent of parent, ..., last element is the root parent
Note
Will be empty for root nodes

◆ getBoundingBox()

const AABB & oe::scene::Node::getBoundingBox ( ) const

Recompute and return bounding box from raw AABB.

Note
if raw bounding box is empty, the bounding box is assumed to have been updated by other means (eg. by a component)

◆ getEnglobingBoundingBox()

const AABB oe::scene::Node::getEnglobingBoundingBox ( ) const

Compute englobing bounding box including all children ones.

Note
Mainly used for collision detection

◆ getRotationNeededToLookAt()

glm::quat oe::scene::Node::getRotationNeededToLookAt ( const glm::vec3 &  target,
const glm::vec3 &  up = glm::vec3(0.f, 1.f, 0.f) 
) const

Get the rotation needed to orient the node at a specified target.

Parameters
targetTarget Position
upDesired upward direction (change it if you want roll effects)

◆ lookAt()

void oe::scene::Node::lookAt ( const glm::vec3 &  target,
const glm::vec3 &  up = glm::vec3(0.f, 1.f, 0.f) 
)

Orient the node to stare at a specified target.

Parameters
targetTarget Position
upDesired upward direction (change it if you want roll effects)

◆ moveToRoot()

void oe::scene::Node::moveToRoot ( )
noexcept

Detach the node from parent to make a root node.

Note
if this node is already a root node, this function will be silently ignored

◆ search()

template<typename T = Node>
T * oe::scene::Node::search ( const std::string  path,
const std::string  separator = "/" 
)
inline

Search for a node among children using a name path.

Note
if multiple nodes at same level have same name, only the first one is returned
Parameters
pathPath to search (starting with the current node name)

◆ setParent()

void oe::scene::Node::setParent ( Node parent)
noexcept

Change the parent of this node.

Parameters
parentThe new node parent

◆ update()

virtual void oe::scene::Node::update ( const double &  delta,
const int8_t  flags = 0 
)
virtual

Update the node.

The flags value is not used by OxygenEngine, but you can use it to implement differents levels of update For example, other engines uses functions such as BeforeUpdate, PreUpdate, PostUpdate, LateUpdate, etc Here, each XXXUpdate translates to update() calls using custom flags values

Parameters
deltaseconds since last call of this function
flagscustom flags

Reimplemented in oe::scene::SkinnedMeshNode.


The documentation for this class was generated from the following file: