Axmol Engine 2.4.0-258ceca
|
MeshRenderer: A mesh can be loaded from model files, .obj, .c3t, .c3b and a mesh renderer renders a list of these loaded meshes with specified materials. More...
#include <MeshRenderer.h>
Inherits Node.
Public Member Functions | |
void | setTexture (std::string_view texFile) |
set diffuse texture, set the first mesh's texture if multiple textures exist | |
Mesh * | getMeshByIndex (int index) const |
get Mesh by index | |
Mesh * | getMeshByName (std::string_view name) const |
get Mesh by Name, returns the first one if there are more than one mesh with the same name | |
std::vector< Mesh * > | getMeshArrayByName (std::string_view name) const |
get mesh array by name, returns all meshes with the given name | |
Mesh * | getMesh () const |
get mesh at index 0 which is the default mesh | |
ssize_t | getMeshCount () const |
get mesh count | |
AttachNode * | getAttachNode (std::string_view boneName) |
return an AttachNode by bone name. | |
void | removeAttachNode (std::string_view boneName) |
remove an attached node | |
void | removeAllAttachNode () |
remove all attached nodes | |
bool | setProgramState (backend::ProgramState *programState, bool ownPS=false) override |
Sets ProgramState, attributes should be bound by the user. | |
virtual Action * | runAction (Action *action) override |
Executes an action, and returns the action that is executed. | |
void | setForceDepthWrite (bool value) |
Force depth buffer writing, this is useful if you want to achieve effects like fading. | |
virtual Rect | getBoundingBox () const override |
Returns a 2d bounding-box Note: the bounding-box is taken from the mesh's AABB with Z-axis ignored. | |
void | setLightMask (unsigned int mask) |
light mask getter & setter, lighting only works when _lightmask & light's flag are set to true, the default value of _lightmask is 0xffff | |
void | setWireframe (bool value) |
enables wireframe rendering mode for this mesh renderer only, this can be very useful for debugging and understanding generated meshes. | |
virtual void | draw (Renderer *renderer, const Mat4 &transform, uint32_t flags) override |
render all meshes within this mesh renderer | |
void | setMaterial (Material *material) |
Adds a new material to this mesh renderer. | |
void | setMaterial (Material *material, int meshIndex) |
Adds a new material to a particular mesh in this mesh renderer. | |
Material * | getMaterial (int meshIndex=0) const |
Gets the material of a specific mesh in this mesh renderer. | |
const Vector< Mesh * > & | getMeshes () const |
Get list of meshes used in this mesh renderer. | |
bool | loadFromCache (std::string_view path) |
load a mesh renderer from cache, returns true if succeeded, false otherwise. | |
bool | loadFromFile (std::string_view path, NodeDatas *nodedatas, MeshDatas *meshdatas, MaterialDatas *materialdatas) |
load a file and feed it's content into meshedatas, nodedatas and materialdatas, obj file and .mtl file should be in the same directory. | |
virtual void | visit (Renderer *renderer, const Mat4 &parentTransform, uint32_t parentFlags) override |
Visits this MeshRenderer's children and draws them recursively. | |
void | genMaterial (bool useLight=false) |
generate default material. | |
MeshIndexData * | getMeshIndexData (std::string_view indexId) const |
get MeshIndexData by Id | |
void | enableInstancing (MeshMaterial::InstanceMaterialType instanceMat, int count=0) |
Enables instancing for this Mesh Renderer, keep in mind that a special vertex shader has to be used, make sure that your shader has a mat4 attribute set on the location of total vertex attributes +1. | |
void | setDynamicInstancing (bool dynamic) |
Set this to true and instancing objects within this mesh renderer will be recalculated each frame, use it when you plan to move objects, Otherwise, transforms will be built once for better performance. | |
void | addInstanceChild (Node *child, bool active=false) |
Adds a child to use it's transformations for instancing. | |
void | shrinkToFitInstances () |
shrinks the instance transform buffer after many steps of expansion to increase performance. | |
void | rebuildInstances () |
rebuilds the instance transform buffer next frame. | |
![]() | |
virtual bool | isRunning () const |
Returns whether or not the node is "running". | |
void | scheduleUpdateWithPriorityLua (int handler, int priority) |
Schedules for lua script. | |
virtual void | cleanup () |
Stops all running actions and schedulers. | |
virtual Scene * | getScene () const |
Returns the Scene that contains the Node. | |
virtual void | setEventDispatcher (EventDispatcher *dispatcher) |
Set event dispatcher for scene. | |
virtual EventDispatcher * | getEventDispatcher () const |
Get the event dispatcher of scene. | |
virtual uint8_t | getOpacity () const |
Return the node's opacity. | |
virtual uint8_t | getDisplayedOpacity () const |
Return the node's display opacity. | |
virtual void | setOpacity (uint8_t opacity) |
Change node opacity. | |
virtual void | updateDisplayedOpacity (uint8_t parentOpacity) |
Update the displayed opacity of node with it's parent opacity;. | |
virtual bool | isCascadeOpacityEnabled () const |
Whether cascadeOpacity is enabled or not. | |
virtual void | setCascadeOpacityEnabled (bool cascadeOpacityEnabled) |
Change node's cascadeOpacity property. | |
virtual const Color3B & | getColor () const |
Query node's color value. | |
virtual const Color3B & | getDisplayedColor () const |
Query node's displayed color. | |
virtual void | setColor (const Color3B &color) |
Change the color of node. | |
virtual void | updateDisplayedColor (const Color3B &parentColor) |
Update node's displayed color with its parent color. | |
virtual bool | isCascadeColorEnabled () const |
Query whether cascadeColor is enabled or not. | |
virtual void | setCascadeColorEnabled (bool cascadeColorEnabled) |
If you want node's color affect the children node's color, then set it to true. | |
virtual void | setOpacityModifyRGB (bool value) |
If you want the opacity affect the color property, then set to true. | |
virtual bool | isOpacityModifyRGB () const |
If node opacity will modify the RGB color value, then you should override this method and return true. | |
void | setOnEnterCallback (const std::function< void()> &callback) |
Set the callback of event onEnter. | |
const std::function< void()> & | getOnEnterCallback () const |
Get the callback of event onEnter. | |
void | setOnExitCallback (const std::function< void()> &callback) |
Set the callback of event onExit. | |
const std::function< void()> & | getOnExitCallback () const |
Get the callback of event onExit. | |
void | setOnEnterTransitionDidFinishCallback (const std::function< void()> &callback) |
Set the callback of event EnterTransitionDidFinish. | |
const std::function< void()> & | getOnEnterTransitionDidFinishCallback () const |
Get the callback of event EnterTransitionDidFinish. | |
void | setOnExitTransitionDidStartCallback (const std::function< void()> &callback) |
Set the callback of event ExitTransitionDidStart. | |
const std::function< void()> & | getOnExitTransitionDidStartCallback () const |
Get the callback of event ExitTransitionDidStart. | |
unsigned short | getCameraMask () const |
get & set camera mask, the node is visible by the camera whose camera flag & node's camera mask is true | |
virtual void | setCameraMask (unsigned short mask, bool applyChildren=true) |
Modify the camera mask for current node. | |
void | applyMaskOnEnter (bool applyChildren) |
Should addChild() make the child follow it's parent's mask? | |
backend::ProgramState * | setProgramStateByProgramId (uint64_t progId) |
Sets ProgramState by programId. | |
virtual void | setLocalZOrder (int localZOrder) |
LocalZOrder is the 'key' used to sort the node relative to its siblings. | |
void | updateOrderOfArrival () |
! | |
virtual int | getLocalZOrder () const |
Gets the local Z order of this node. | |
virtual void | setGlobalZOrder (float globalZOrder) |
Defines the order in which the nodes are renderer. | |
virtual float | getGlobalZOrder () const |
Returns the Node's Global Z Order. | |
virtual void | setScaleX (float scaleX) |
Sets the scale (x) of the node. | |
virtual float | getScaleX () const |
Returns the scale factor on X axis of this node. | |
virtual void | setScaleY (float scaleY) |
Sets the scale (y) of the node. | |
virtual float | getScaleY () const |
Returns the scale factor on Y axis of this node. | |
virtual void | setScaleZ (float scaleZ) |
Changes the scale factor on Z axis of this node. | |
virtual float | getScaleZ () const |
Returns the scale factor on Z axis of this node. | |
virtual void | setScale (float scale) |
Sets the scale (x,y,z) of the node. | |
virtual float | getScale () const |
Gets the scale factor of the node, when X and Y have the same scale factor. | |
virtual void | setScale (float scaleX, float scaleY) |
Sets the scale (x,y) of the node. | |
virtual void | setPosition (const Vec2 &position) |
Sets the position (x,y) of the node in its parent's coordinate system. | |
virtual void | setPositionNormalized (const Vec2 &position) |
Sets the position (x,y) using values between 0 and 1. | |
virtual const Vec2 & | getPosition () const |
Gets the position (x,y) of the node in its parent's coordinate system. | |
virtual const Vec2 & | getPositionNormalized () const |
Returns the normalized position. | |
virtual void | setPosition (float x, float y) |
Sets the position (x,y) of the node in its parent's coordinate system. | |
virtual void | getPosition (float *x, float *y) const |
Gets position in a more efficient way, returns two number instead of a Vec2 object. | |
virtual void | setPositionX (float x) |
Gets/Sets x or y coordinate individually for position. | |
virtual float | getPositionX () const |
Gets the x coordinate of the node in its parent's coordinate system. | |
virtual void | setPositionY (float y) |
Sets the y coordinate of the node in its parent's coordinate system. | |
virtual float | getPositionY () const |
Gets the y coordinate of the node in its parent's coordinate system. | |
virtual void | setPosition3D (const Vec3 &position) |
Sets the position (X, Y, and Z) in its parent's coordinate system. | |
virtual Vec3 | getPosition3D () const |
Returns the position (X,Y,Z) in its parent's coordinate system. | |
virtual void | setPositionZ (float positionZ) |
Sets the 'z' coordinate in the position. | |
virtual float | getPositionZ () const |
Gets position Z coordinate of this node. | |
virtual void | setSkewX (float skewX) |
Changes the X skew angle of the node in degrees. | |
virtual float | getSkewX () const |
Returns the X skew angle of the node in degrees. | |
virtual void | setSkewY (float skewY) |
Changes the Y skew angle of the node in degrees. | |
virtual float | getSkewY () const |
Returns the Y skew angle of the node in degrees. | |
virtual void | setAnchorPoint (const Vec2 &anchorPoint) |
Sets the anchor point in percent. | |
virtual const Vec2 & | getAnchorPoint () const |
Returns the anchor point in percent. | |
virtual const Vec2 & | getAnchorPointInPoints () const |
Returns the anchorPoint in absolute pixels. | |
virtual void | setContentSize (const Vec2 &contentSize) |
Sets the untransformed size of the node. | |
virtual const Vec2 & | getContentSize () const |
Returns the untransformed size of the node. | |
virtual bool | hitTest (const Vec2 &worldPoint) const |
The basic node hit test, since axmol-1.0. | |
virtual void | setVisible (bool visible) |
Sets whether the node is visible. | |
virtual bool | isVisible () const |
Determines if the node is visible. | |
virtual void | setRotation (float rotation) |
Sets the rotation (angle) of the node in degrees. | |
virtual float | getRotation () const |
Returns the rotation of the node in degrees. | |
virtual void | setRotation3D (const Vec3 &rotation) |
Sets the rotation (X,Y,Z) in degrees. | |
virtual Vec3 | getRotation3D () const |
Returns the rotation (X,Y,Z) in degrees. | |
virtual void | setRotationQuat (const Quaternion &quat) |
Set rotation by quaternion. | |
virtual Quaternion | getRotationQuat () const |
Return the rotation by quaternion, Note that when _rotationZ_X == _rotationZ_Y, the returned quaternion equals to RotationZ_X * RotationY * RotationX, it equals to RotationY * RotationX otherwise. | |
virtual void | setRotationSkewX (float rotationX) |
Sets the X rotation (angle) of the node in degrees which performs a horizontal rotational skew. | |
virtual float | getRotationSkewX () const |
Gets the X rotation (angle) of the node in degrees which performs a horizontal rotation skew. | |
virtual void | setRotationSkewY (float rotationY) |
Sets the Y rotation (angle) of the node in degrees which performs a vertical rotational skew. | |
virtual float | getRotationSkewY () const |
Gets the Y rotation (angle) of the node in degrees which performs a vertical rotational skew. | |
virtual void | setIgnoreAnchorPointForPosition (bool ignore) |
Sets whether the anchor point will be (0,0) when you position this node. | |
virtual bool | isIgnoreAnchorPointForPosition () const |
Gets whether the anchor point will be (0,0) when you position this node. | |
virtual int | getTag () const |
Returns a tag that is used to identify the node easily. | |
virtual void | setTag (int tag) |
Changes the tag that is used to identify the node easily. | |
virtual std::string_view | getName () const |
Returns a string that is used to identify the node. | |
virtual void | setName (std::string_view name) |
Changes the name that is used to identify the node easily. | |
virtual void * | getUserData () |
Returns a custom user data pointer. | |
virtual const void * | getUserData () const |
@lua NA | |
virtual void | setUserData (void *userData) |
Sets a custom user data pointer. | |
virtual Object * | getUserObject () |
Returns a user assigned Object. | |
virtual const Object * | getUserObject () const |
@lua NA | |
virtual void | setUserObject (Object *userObject) |
Returns a user assigned Object. | |
virtual void | onEnter () |
Event callback that is invoked every time when Node enters the 'stage'. | |
virtual void | onEnterTransitionDidFinish () |
Event callback that is invoked when the Node enters in the 'stage'. | |
virtual void | onExit () |
Event callback that is invoked every time the Node leaves the 'stage'. | |
virtual void | onExitTransitionDidStart () |
Event callback that is called every time the Node leaves the 'stage'. | |
virtual void | setActionManager (ActionManager *actionManager) |
Sets the ActionManager object that is used by all actions. | |
virtual ActionManager * | getActionManager () |
Gets the ActionManager object that is used by all actions. | |
void | stopAllActions () |
Stops and removes all actions from the running action list . | |
void | stopAction (Action *action) |
Stops and removes an action from the running action list. | |
void | stopActionByTag (int tag) |
Removes an action from the running action list by its tag. | |
void | stopAllActionsByTag (int tag) |
Removes all actions from the running action list by its tag. | |
void | stopActionsByFlags (unsigned int flags) |
Removes all actions from the running action list by its flags. | |
Action * | getActionByTag (int tag) |
Gets an action from the running action list by its tag. | |
ssize_t | getNumberOfRunningActions () const |
Returns the numbers of actions that are running plus the ones that are schedule to run (actions in actionsToAdd and actions arrays). | |
ssize_t | getNumberOfRunningActionsByTag (int tag) const |
Returns the numbers of actions that are running plus the ones that are schedule to run (actions in actionsToAdd and actions arrays) with a specific tag. | |
virtual void | setScheduler (Scheduler *scheduler) |
Sets a Scheduler object that is used to schedule all "updates" and timers. | |
virtual Scheduler * | getScheduler () |
Gets a Scheduler object. | |
bool | isScheduled (SEL_SCHEDULE selector) const |
Checks whether a selector is scheduled. | |
bool | isScheduled (std::string_view key) const |
Checks whether a lambda function is scheduled. | |
void | scheduleUpdate () |
Schedules the "update" method. | |
void | scheduleUpdateWithPriority (int priority) |
Schedules the "update" method with a custom priority. | |
void | schedule (SEL_SCHEDULE selector, float interval, unsigned int repeat, float delay) |
Schedules a custom selector. | |
void | schedule (SEL_SCHEDULE selector, float interval) |
Schedules a custom selector with an interval time in seconds. | |
void | scheduleOnce (SEL_SCHEDULE selector, float delay) |
Schedules a selector that runs only once, with a delay of 0 or larger. | |
void | scheduleOnce (const std::function< void(float)> &callback, float delay, std::string_view key) |
Schedules a lambda function that runs only once, with a delay of 0 or larger. | |
void | schedule (SEL_SCHEDULE selector) |
Schedules a custom selector, the scheduled selector will be ticked every frame. | |
void | schedule (const std::function< void(float)> &callback, std::string_view key) |
Schedules a lambda function. | |
void | schedule (const std::function< void(float)> &callback, float interval, std::string_view key) |
Schedules a lambda function. | |
void | schedule (const std::function< void(float)> &callback, float interval, unsigned int repeat, float delay, std::string_view key) |
Schedules a lambda function. | |
void | unschedule (SEL_SCHEDULE selector) |
Unschedules a custom selector. | |
void | unschedule (std::string_view key) |
Unschedules a lambda function. | |
void | unscheduleAllCallbacks () |
Unschedule all scheduled selectors and lambda functions: custom selectors, and the 'update' selector and lambda functions. | |
virtual void | resume () |
Resumes all scheduled selectors, actions and event listeners. | |
virtual void | pause () |
Pauses all scheduled selectors, actions and event listeners. | |
virtual void | update (float delta) |
Update method will be called automatically every frame if "scheduleUpdate" is called, and the node is "live". | |
virtual void | updateTransform () |
Calls children's updateTransform() method recursively. | |
virtual const Mat4 & | getNodeToParentTransform () const |
Returns the matrix that transform the node's (local) space coordinates into the parent's space coordinates. | |
virtual Mat4 | getNodeToParentTransform (Node *ancestor) const |
Returns the matrix that transform the node's (local) space coordinates into the parent's space coordinates. | |
virtual AffineTransform | getNodeToParentAffineTransform (Node *ancestor) const |
Returns the affine transform matrix that transform the node's (local) space coordinates into the parent's space coordinates. | |
virtual void | setNodeToParentTransform (const Mat4 &transform) |
Sets the transformation matrix manually. | |
virtual const Mat4 & | getParentToNodeTransform () const |
Returns the matrix that transform parent's space coordinates to the node's (local) space coordinates. | |
virtual Mat4 | getNodeToWorldTransform () const |
Returns the world affine transform matrix. | |
virtual Mat4 | getWorldToNodeTransform () const |
Returns the inverse world affine transform matrix. | |
Vec2 | convertToNodeSpace (const Vec2 &worldPoint) const |
Converts a Vec2 to node (local) space coordinates. | |
Vec2 | convertToWorldSpace (const Vec2 &nodePoint) const |
Converts a Vec2 to world space coordinates. | |
Vec2 | convertToNodeSpaceAR (const Vec2 &worldPoint) const |
Converts a Vec2 to node (local) space coordinates. | |
Vec2 | convertToWorldSpaceAR (const Vec2 &nodePoint) const |
Converts a local Vec2 to world space coordinates.The result is in Points. | |
Vec2 | convertTouchToNodeSpace (Touch *touch) const |
convenience methods which take a Touch instead of Vec2. | |
Vec2 | convertTouchToNodeSpaceAR (Touch *touch) const |
converts a Touch (world coordinates) into a local coordinate. | |
Vec2 | getWorldPosition () const |
Gets position of node in world space. | |
void | setWorldPosition (const Vec2 &position) |
Sets position of node in world space. | |
void | setAdditionalTransform (const Mat4 *additionalTransform) |
Sets an additional transform matrix to the node. | |
Component * | getComponent (std::string_view name) |
Gets a component by its name. | |
virtual bool | addComponent (Component *component) |
Adds a component. | |
virtual bool | removeComponent (std::string_view name) |
Removes a component by its name. | |
virtual bool | removeComponent (Component *component) |
Removes a component by its pointer. | |
virtual void | removeAllComponents () |
Removes all components. | |
virtual std::string | getDescription () const |
Gets the description string. | |
virtual void | addChild (Node *child) |
Adds a child to the container with z-order as 0. | |
virtual void | addChild (Node *child, int localZOrder) |
Adds a child to the container with a local z-order. | |
virtual void | addChild (Node *child, int localZOrder, int tag) |
Adds a child to the container with z order and tag. | |
virtual void | addChild (Node *child, int localZOrder, std::string_view name) |
Adds a child to the container with z order and tag. | |
virtual Node * | getChildByTag (int tag) const |
Gets a child from the container with its tag. | |
template<typename T> | |
T | getChildByTag (int tag) const |
Gets a child from the container with its tag that can be cast to Type T. | |
virtual Node * | getChildByName (std::string_view name) const |
Gets a child from the container with its name. | |
template<typename T> | |
T | getChildByName (std::string_view name) const |
Gets a child from the container with its name that can be cast to Type T. | |
virtual void | enumerateChildren (std::string_view name, std::function< bool(Node *node)> callback) const |
Search the children of the receiving node to perform processing for nodes which share a name. | |
virtual Vector< Node * > & | getChildren () |
Returns the array of the node's children. | |
virtual ssize_t | getChildrenCount () const |
Returns the amount of children. | |
virtual void | setParent (Node *parent) |
Sets the parent node. | |
virtual Node * | getParent () |
Returns a pointer to the parent node. | |
virtual void | removeFromParent () |
Removes this node itself from its parent node with a cleanup. | |
virtual void | removeFromParentAndCleanup (bool cleanup) |
Removes this node itself from its parent node. | |
virtual void | removeChild (Node *child, bool cleanup=true) |
Removes a child from the container. | |
virtual void | removeChildByTag (int tag, bool cleanup=true) |
Removes a child from the container by tag value. | |
virtual void | removeChildByName (std::string_view name, bool cleanup=true) |
Removes a child from the container by tag value. | |
virtual void | removeAllChildren () |
Removes all children from the container with a cleanup. | |
virtual void | removeAllChildrenWithCleanup (bool cleanup) |
Removes all children from the container, and do a cleanup to all running actions depending on the cleanup parameter. | |
virtual void | reorderChild (Node *child, int localZOrder) |
Reorders a child according to a new z value. | |
virtual void | sortAllChildren () |
Sorts the children array once before drawing, instead of every time when a child is added or reordered. | |
![]() | |
void | retain () |
Retains the ownership. | |
void | release () |
Releases the ownership immediately. | |
Object * | autorelease () |
Releases the ownership sometime soon automatically. | |
unsigned int | getReferenceCount () const |
Returns the Object's current reference count. | |
virtual | ~Object () |
Destructor. | |
Static Public Member Functions | |
static MeshRenderer * | create () |
Creates an empty MeshRenderer without a mesh or a texture. | |
static MeshRenderer * | create (std::string_view modelPath) |
creates a MeshRenderer with a specified path | |
static MeshRenderer * | create (std::string_view modelPath, std::string_view texturePath) |
creates a MeshRenderer. | |
static void | createAsync (std::string_view modelPath, const std::function< void(MeshRenderer *, void *)> &callback, void *callbackparam) |
create 3d mesh asynchronously If the 3d model was previously loaded, it will create a new 3d mesh and the callback will be called once. | |
static Node * | create () |
Allocates and initializes a node. | |
static int | getAttachedNodeCount () |
Gets count of nodes those are attached to scene graph. | |
template<typename _T> | |
static void | sortNodes (ax::Vector< _T * > &nodes) |
Sorts helper function. | |
Additional Inherited Members | |
![]() | |
unsigned int | _ID |
object id, ScriptSupport need public _ID | |
int | _luaID |
Lua reference id. | |
![]() | |
static const int | INVALID_TAG = -1 |
Default tag used for all the nodes. | |
MeshRenderer: A mesh can be loaded from model files, .obj, .c3t, .c3b and a mesh renderer renders a list of these loaded meshes with specified materials.
|
static |
Creates an empty MeshRenderer without a mesh or a texture.
Can be used to create procedural meshes on runtime.
|
static |
creates a MeshRenderer.
A mesh can only have one texture, the default texture can be overridden with 'texturePath'
|
static |
create 3d mesh asynchronously If the 3d model was previously loaded, it will create a new 3d mesh and the callback will be called once.
Otherwise it will load the model file in a new thread, and when the 3d mesh is loaded, the callback will be called with the created MeshRenderer and a user-defined parameter. The callback will be called from the main thread, so it is safe to create any object from the callback.
modelPath | model to be loaded |
callback | callback when loading is finished |
callbackparam | user-defined parameter for the callback |
std::vector< Mesh * > getMeshArrayByName | ( | std::string_view | name | ) | const |
get mesh array by name, returns all meshes with the given name
@lua NA
AttachNode * getAttachNode | ( | std::string_view | boneName | ) |
return an AttachNode by bone name.
Otherwise, return nullptr if it doesn't exist
|
overridevirtual |
Executes an action, and returns the action that is executed.
For the MeshRenderer special logic is needed to take care of Fading.
This node becomes the action's target. Refer to Action::getTarget()
Reimplemented from Node.
void setMaterial | ( | Material * | material | ) |
Adds a new material to this mesh renderer.
The Material will be applied to all the meshes that belong to the mesh renderer. It will internally call setMaterial(material,-1)
void setMaterial | ( | Material * | material, |
int | meshIndex ) |
Adds a new material to a particular mesh in this mesh renderer.
if meshIndex == -1, then it will be applied to all the meshes that belong to this mesh renderer.
meshIndex | Index of the mesh to apply the material to. |
Material * getMaterial | ( | int | meshIndex = 0 | ) | const |
Gets the material of a specific mesh in this mesh renderer.
meshIndex | Index of the mesh to get the material from. 0 is the default index. |
|
overridevirtual |
Visits this MeshRenderer's children and draws them recursively.
Note: all children will be rendered in 3D space with depth, this behaviour can be changed using setForce2DQueue()
Reimplemented from Node.
void enableInstancing | ( | MeshMaterial::InstanceMaterialType | instanceMat, |
int | count = 0 ) |
Enables instancing for this Mesh Renderer, keep in mind that a special vertex shader has to be used, make sure that your shader has a mat4 attribute set on the location of total vertex attributes +1.
instanceMat | Prebuilt material made to work with instancing. |
count | Count of Instances, 0 to enable auto expanstion, but you should call shrinkToFitInstances after adding children to maximize performance. |
void setDynamicInstancing | ( | bool | dynamic | ) |
Set this to true and instancing objects within this mesh renderer will be recalculated each frame, use it when you plan to move objects, Otherwise, transforms will be built once for better performance.
to update transforms on demand use rebuildInstances()
void addInstanceChild | ( | Node * | child, |
bool | active = false ) |
Adds a child to use it's transformations for instancing.
The child is in the space of this Node, keep in mind that the node isn't added to the scene graph, it is instead retained and it's parent is set to this node, updates and actions will not run. the reason for this is performance.
child,The | child to use for instancing. |
active,Child | will run updates & actions but performance issues may arise. |