Description

Irrlicht-based Chrono run-time visualization system.

#include <ChVisualSystemIrrlicht.h>

Inheritance diagram for chrono::irrlicht::ChVisualSystemIrrlicht:
Collaboration diagram for chrono::irrlicht::ChVisualSystemIrrlicht:

Classes

class  ChIrrNodeVisual
 Irrlicht scene node for a visual model not associated with a physics item. More...
 

Public Member Functions

 ChVisualSystemIrrlicht (ChSystem *sys, const ChVector3d &camera_pos=ChVector3d(2, 2, 2), const ChVector3d &camera_targ=ChVector3d(0, 0, 0))
 Auto-initialized run-time visualization system, with default settings.
 
virtual void AttachSystem (ChSystem *sys) override
 Attach another Chrono system to the run-time visualization system. More...
 
void SetAntialias (bool val)
 Enable/disable antialias (default true). More...
 
void SetFullscreen (bool val)
 Enable/disable full-screen mode (default false). More...
 
void SetShadows (bool val)
 Enable/disable shadows (default false). More...
 
void SetDriverType (irr::video::E_DRIVER_TYPE driver_type)
 Set the device driver type (default irr::video::EDT_DIRECT3D9). More...
 
void SetWindowSize (unsigned int width, unsigned int height)
 Set the window size (default 640x480). More...
 
void SetWindowTitle (const std::string &win_title)
 Set the windoiw title (default ""). More...
 
void SetWindowId (void *window_id)
 Set the window ID. More...
 
void SetCameraVertical (CameraVerticalDir vert)
 Use Y-up camera rendering (default CameraVerticalDir::Y). More...
 
CameraVerticalDir GetCameraVertical ()
 Tells if the current camera vertical mode is Y or Z.
 
void SetLogLevel (irr::ELOG_LEVEL log_level)
 Set the Irrlicht logging level (default irr::ELL_INFORMATION). More...
 
void SetSymbolScale (double scale)
 Set the scale for symbol drawing (default: 1).
 
virtual void Initialize () override
 Initialize the visualization system. More...
 
void AddLogo (const std::string &logo_filename=GetChronoDataFile("logo_chronoengine_alpha.png"))
 Add a logo in a 3D scene. More...
 
virtual int AddCamera (const ChVector3d &pos, ChVector3d targ=VNULL) override
 Add a camera in an Irrlicht 3D scene. More...
 
virtual void AddGrid (double x_step, double y_step, int nx, int ny, ChCoordsys<> pos=CSYSNORM, ChColor col=ChColor(0.1f, 0.1f, 0.1f)) override
 Add a grid with specified parameters in the x-y plane of the given frame. More...
 
void UpdateGrid (int id, const ChCoordsys<> &csys)
 
virtual void SetCameraPosition (int id, const ChVector3d &pos) override
 Set the location of the specified camera.
 
virtual void SetCameraTarget (int id, const ChVector3d &target) override
 Set the target (look-at) point of the specified camera.
 
virtual void SetCameraPosition (const ChVector3d &pos) override
 Set the location of the current (active) camera.
 
virtual void SetCameraTarget (const ChVector3d &target) override
 Set the target (look-at) point of the current (active) camera.
 
void AddSkyBox (const std::string &texture_dir=GetChronoDataFile("skybox/"))
 Add a sky box in a 3D scene. More...
 
irr::scene::ILightSceneNode * AddLightDirectional (double elevation=60, double azimuth=60, ChColor ambient=ChColor(0.5f, 0.5f, 0.5f), ChColor specular=ChColor(0.2f, 0.2f, 0.2f), ChColor diffuse=ChColor(1.0f, 1.0f, 1.0f))
 Add a directional light to the scene. More...
 
irr::scene::ILightSceneNode * AddLight (const ChVector3d &pos, double radius, ChColor color=ChColor(0.7f, 0.7f, 0.7f))
 Add a point light to the scene. More...
 
irr::scene::ILightSceneNode * AddLightWithShadow (const ChVector3d &pos, const ChVector3d &aim, double radius, double near_value, double far_value, double angle, unsigned int resolution=512, ChColor color=ChColor(1, 1, 1), bool directional=false, bool clipborder=true)
 Add a point light that cast shadow (using soft shadows/shadow maps) Note that the quality of the shadow strictly depends on how close 'near_value' and 'far_value' are to the bounding box of the scene. More...
 
void AddTypicalLights ()
 Simple shortcut to set two point lights in the scene. More...
 
void AddUserEventReceiver (irr::IEventReceiver *receiver)
 Attach a custom event receiver to the application.
 
void EnableShadows (std::shared_ptr< ChPhysicsItem > item=nullptr)
 Enable shadow maps for all visual models in a scene or only for a single physics item. More...
 
void EnableContactDrawing (ContactsDrawMode mode)
 Enable contact rendering (default: none). More...
 
void EnableLinkDrawing (LinkDrawMode mode)
 Enable rendering of link (joint) frames (default: none). More...
 
void EnableBodyFrameDrawing (bool val)
 Enable rendering of body frames (default: false). More...
 
void EnableLinkFrameDrawing (bool val)
 Enable rendering of link frames (default: false). More...
 
void EnableCollisionShapeDrawing (bool val)
 Enable rendering of collision shapes (default: false). More...
 
void EnableAbsCoordsysDrawing (bool val)
 Enable rendering of the absolute coordinate system (default: none). More...
 
void ShowProfiler (bool val)
 Show the realtime profiler in the 3D view.
 
void ShowExplorer (bool val)
 Show the object explorer.
 
void ShowInfoPanel (bool val)
 Show the info panel in the 3D view.
 
void ShowConvergencePlot (bool val)
 Show the convergence plot (available only for iterative solvers).
 
void SetInfoTab (int ntab)
 Set the active tab on the info panel. More...
 
irr::IrrlichtDevice * GetDevice ()
 
irr::video::IVideoDriver * GetVideoDriver ()
 
irr::scene::ISceneManager * GetSceneManager ()
 
irr::scene::ICameraSceneNode * GetActiveCamera ()
 
irr::gui::IGUIEnvironment * GetGUIEnvironment ()
 
void * GetWindowId () const
 Get the window ID.
 
ChIrrGUIGetGUI ()
 Return the Irrlicht ChIrrGUI object.
 
virtual void BindAll () override
 Process all visual assets in the associated ChSystem. More...
 
virtual void BindItem (std::shared_ptr< ChPhysicsItem > item) override
 Process the visual assets for the spcified physics item. More...
 
virtual void UnbindItem (std::shared_ptr< ChPhysicsItem > item) override
 Remove the visual assets for the specified physics item from this visualization system.
 
virtual int AddVisualModel (std::shared_ptr< ChVisualModel > model, const ChFrame<> &frame) override
 Add a visual model not associated with a physical item. More...
 
virtual int AddVisualModel (std::shared_ptr< ChVisualShape > shape, const ChFrame<> &frame) override
 Add a visual model not associated with a physical item. More...
 
virtual void UpdateVisualModel (int id, const ChFrame<> &frame) override
 Update the position of the specified visualization-only model.
 
virtual bool Run () override
 Run the Irrlicht device. More...
 
virtual void Quit () override
 Terminate the visualization system.
 
virtual void BeginScene () override
 Perform any necessary operations at the beginning of each rendering frame.
 
virtual void BeginScene (bool backBuffer, bool zBuffer, ChColor color)
 Clean the canvas at the beginning of each rendering frame.
 
virtual void Render () override
 Draw all 3D shapes and GUI elements at the current frame. More...
 
virtual void RenderFrame (const ChFrame<> &frame, double axis_length=1) override
 Render the specified reference frame.
 
virtual void RenderCOGFrames (double axis_length=1) override
 Render COG frames for all bodies in the system.
 
virtual void EndScene () override
 End the scene draw at the end of each animation frame.
 
irr::gui::IGUIFont * GetMonospaceFont () const
 Return a fixed-size font for rendering GUI.
 
void SetJPEGQuality (unsigned int quality)
 Set the JPEG quality level (between 0 and 100) for saved snapshots (default: 0). More...
 
virtual void WriteImageToFile (const std::string &filename) override
 Create a snapshot of the last rendered frame and save it to the provided file. More...
 
bool GetUtilityFlag () const
 Get internal utility flag value.
 
void SetUtilityFlag (bool flag)
 Set internal utility flag value.
 
irr::SIrrlichtCreationParameters GetCreationParameters () const
 Get device creation parameters.
 
void SetCreationParameters (const irr::SIrrlichtCreationParameters &device_params)
 Set device creation parameters.
 
std::vector< std::shared_ptr< RTSCamera > > GetCameras () const
 Get list of cameras defined for the scene.
 
- Public Member Functions inherited from chrono::ChVisualSystem
void SetVerbose (bool verbose)
 Enable/disable information terminal output during initialization (default: false).
 
virtual ChVector3d GetCameraPosition () const
 Get the location of the current (active) camera.
 
virtual ChVector3d GetCameraTarget () const
 Get the target (look-at) point of the current (active) camera.
 
void UpdateCamera (int id, const ChVector3d &pos, ChVector3d target)
 Update the location and/or target points of the specified camera.
 
void UpdateCamera (const ChVector3d &pos, ChVector3d target)
 
virtual double GetSimulationRTF () const
 Return the simulation real-time factor (simulation time / simulated time). More...
 
virtual double GetSimulationTime () const
 Return the current simulated time. More...
 
void SetImageOutputDirectory (const std::string &dir)
 Set output directory for saving frame snapshots (default: ".").
 
void SetImageOutput (bool val)
 Enable/disable writing of frame snapshots to file.
 
std::vector< ChSystem * > GetSystems () const
 Get the list of associated Chrono systems.
 
ChSystemGetSystem (int i) const
 Get the specified associated Chrono system.
 

Protected Member Functions

void CreateIrrNodes (const ChAssembly *assembly, std::unordered_set< const ChAssembly * > &trace)
 Create the ChIrrNodes for all visual model instances in the specified assembly.
 
void CreateIrrNode (std::shared_ptr< ChPhysicsItem > item)
 Create the ChIrrNodeModel for the visual model instance of the specified physics item.
 
void PopulateIrrNode (irr::scene::ISceneNode *node, std::shared_ptr< ChVisualModel > model, const ChFrame<> &parent_frame)
 Populate the ChIrrNodeModel for the visual model instance of the specified physics item.
 
void PurgeIrrNodes ()
 Purge Irrlicht nodes associated with a deleted physics item or with a deleted visual model.
 
void AddShadowToIrrNode (irr::scene::ISceneNode *node)
 Add shadow to an Irrlicht node.
 
virtual void OnSetup (ChSystem *sys) override
 Perform necessary setup operations at the beginning of a time step.
 
virtual void OnUpdate (ChSystem *sys) override
 Perform necessary update operations at the end of a time step.
 
virtual void OnClear (ChSystem *sys) override
 Remove all visualization objects from this visualization system.
 

Protected Attributes

std::vector< std::shared_ptr< RTSCamera > > m_cameras
 list of cameras defined for the scene
 
std::vector< GridData > m_grids
 list of visualization grids
 
std::unordered_map< ChPhysicsItem *, std::shared_ptr< ChIrrNodeModel > > m_nodes
 scene nodes for physics items
 
std::vector< std::shared_ptr< ChIrrNodeVisual > > m_vis_nodes
 scene nodes for vis-only models
 
bool m_yup
 use Y-up if true, Z-up if false
 
std::string m_win_title
 window title
 
irr::SIrrlichtCreationParameters m_device_params
 Irrlicht device parameters.
 
irr::IrrlichtDevice * m_device
 Irrlicht visualization device.
 
irr::gui::IGUIFont * m_monospace_font
 Fixed-size font.
 
irr::scene::ISceneNode * m_container
 Irrlicht scene container.
 
std::unique_ptr< ChIrrGUIm_gui
 associated Irrlicht GUI and event receiver
 
std::unique_ptr< EffectHandlerm_effect_handler
 effect handler for shadow maps
 
bool m_use_effects
 flag to enable/disable effects
 
bool m_utility_flag = false
 utility flag that may be accessed from outside
 
irr::u32 m_quality
 JPEG quality level (for saved snapshots)
 
irr::scene::IAnimatedMesh * sphereMesh
 
irr::scene::IMesh * cubeMesh
 
irr::scene::IMesh * cylinderMesh
 
irr::scene::IMesh * capsuleMesh
 
irr::scene::IMesh * coneMesh
 
- Protected Attributes inherited from chrono::ChVisualSystem
bool m_verbose
 terminal output
 
bool m_initialized
 
std::vector< ChSystem * > m_systems
 associated Chrono system(s)
 
bool m_write_images
 if true, save snapshots
 
std::string m_image_dir
 directory for image files
 

Additional Inherited Members

- Public Types inherited from chrono::ChVisualSystem
enum  Type {
  Type::IRRLICHT, Type::VSG, Type::OpenGL, Type::OptiX,
  NONE
}
 Supported run-time visualization systems. More...
 

Member Function Documentation

◆ AddCamera()

int chrono::irrlicht::ChVisualSystemIrrlicht::AddCamera ( const ChVector3d pos,
ChVector3d  targ = VNULL 
)
overridevirtual

Add a camera in an Irrlicht 3D scene.

The camera rotation/pan is controlled by mouse left and right buttons, the zoom is controlled by mouse wheel or rmb+lmb+mouse, the position can be changed also with keyboard up/down/left/right arrows, the height can be changed with keyboard 'PgUp' and 'PgDn' keys. Optional parameters are position and target. Has no effect, unles called after Initialize().

Reimplemented from chrono::ChVisualSystem.

◆ AddGrid()

void chrono::irrlicht::ChVisualSystemIrrlicht::AddGrid ( double  x_step,
double  y_step,
int  nx,
int  ny,
ChCoordsys<>  pos = CSYSNORM,
ChColor  col = ChColor(0.1f, 0.1f, 0.1f) 
)
overridevirtual

Add a grid with specified parameters in the x-y plane of the given frame.

Parameters
x_stepgrid cell size in X direction
y_stepgrid cell size in Y direction
nxnumber of cells in X direction
nynumber of cells in Y direction
posgrid reference frame
colgrid line color

Reimplemented from chrono::ChVisualSystem.

◆ AddLight()

ILightSceneNode * chrono::irrlicht::ChVisualSystemIrrlicht::AddLight ( const ChVector3d pos,
double  radius,
ChColor  color = ChColor(0.7f, 0.7f, 0.7f) 
)

Add a point light to the scene.

Has no effect, unles called after Initialize().

◆ AddLightDirectional()

ILightSceneNode * chrono::irrlicht::ChVisualSystemIrrlicht::AddLightDirectional ( double  elevation = 60,
double  azimuth = 60,
ChColor  ambient = ChColor(0.5f, 0.5f, 0.5f),
ChColor  specular = ChColor(0.2f, 0.2f, 0.2f),
ChColor  diffuse = ChColor(1.0f, 1.0f, 1.0f) 
)

Add a directional light to the scene.

Has no effect, unless called after Initialize(). Light direction is defined by:

  • elevation (deg) between 0 (at the horizon) and 90 (above)
  • azimuth (deg) between 0 and 360, with 0 = South (-X), 90 = East (-Y), 180 = North (+X), 270 = West (+Y)
Parameters
elevationlight elevation
azimuthlight azimuth
ambientambient color
specularspecular color
diffusediffuse color

◆ AddLightWithShadow()

ILightSceneNode * chrono::irrlicht::ChVisualSystemIrrlicht::AddLightWithShadow ( const ChVector3d pos,
const ChVector3d aim,
double  radius,
double  near_value,
double  far_value,
double  angle,
unsigned int  resolution = 512,
ChColor  color = ChColor(1, 1, 1),
bool  directional = false,
bool  clipborder = true 
)

Add a point light that cast shadow (using soft shadows/shadow maps) Note that the quality of the shadow strictly depends on how close 'near_value' and 'far_value' are to the bounding box of the scene.

Use AddShadow() to enable shadows for an object or for the entire scene. Has no effect, unless called after Initialize().

◆ AddLogo()

void chrono::irrlicht::ChVisualSystemIrrlicht::AddLogo ( const std::string &  logo_filename = GetChronoDataFile("logo_chronoengine_alpha.png"))

Add a logo in a 3D scene.

Has no effect, unles called after Initialize().

◆ AddSkyBox()

void chrono::irrlicht::ChVisualSystemIrrlicht::AddSkyBox ( const std::string &  texture_dir = GetChronoDataFile("skybox/"))

Add a sky box in a 3D scene.

Note: it is assumed that the specified "texture_dir" directory contains the following three texture images: sky_lf.jpg, sky_up.jpg, sky_dn.jpg. Has no effect, unless called after Initialize().

◆ AddTypicalLights()

void chrono::irrlicht::ChVisualSystemIrrlicht::AddTypicalLights ( )

Simple shortcut to set two point lights in the scene.

For more precise control on lights, use AddLight() or just use Irrlicht directly. Has no effect, unless called after Initialize().

◆ AddVisualModel() [1/2]

int chrono::irrlicht::ChVisualSystemIrrlicht::AddVisualModel ( std::shared_ptr< ChVisualModel model,
const ChFrame<> &  frame 
)
overridevirtual

Add a visual model not associated with a physical item.

Return a model ID which can be used later to modify the position of this visual model.

Reimplemented from chrono::ChVisualSystem.

◆ AddVisualModel() [2/2]

int chrono::irrlicht::ChVisualSystemIrrlicht::AddVisualModel ( std::shared_ptr< ChVisualShape shape,
const ChFrame<> &  frame 
)
overridevirtual

Add a visual model not associated with a physical item.

This version constructs a visual model consisting of the single specified shape. Return an ID which can be used later to modify the position of this visual model.

Reimplemented from chrono::ChVisualSystem.

◆ AttachSystem()

void chrono::irrlicht::ChVisualSystemIrrlicht::AttachSystem ( ChSystem sys)
overridevirtual

Attach another Chrono system to the run-time visualization system.

Currently only the first associated Chrono system is rendered.

Reimplemented from chrono::ChVisualSystem.

◆ BindAll()

void chrono::irrlicht::ChVisualSystemIrrlicht::BindAll ( )
overridevirtual

Process all visual assets in the associated ChSystem.

This function is called by default by Initialize(), but can also be called later if further modifications to visualization assets occur.

Reimplemented from chrono::ChVisualSystem.

◆ BindItem()

void chrono::irrlicht::ChVisualSystemIrrlicht::BindItem ( std::shared_ptr< ChPhysicsItem item)
overridevirtual

Process the visual assets for the spcified physics item.

This function must be called if a new physics item is added to the system or if changes to its visual model occur after the call to Initialize().

Reimplemented from chrono::ChVisualSystem.

◆ EnableAbsCoordsysDrawing()

void chrono::irrlicht::ChVisualSystemIrrlicht::EnableAbsCoordsysDrawing ( bool  val)

Enable rendering of the absolute coordinate system (default: none).

Has no effect, unless called after the visual system is initialized and attached.

◆ EnableBodyFrameDrawing()

void chrono::irrlicht::ChVisualSystemIrrlicht::EnableBodyFrameDrawing ( bool  val)

Enable rendering of body frames (default: false).

Has no effect, unless called after the visual system is initialized and attached.

◆ EnableCollisionShapeDrawing()

void chrono::irrlicht::ChVisualSystemIrrlicht::EnableCollisionShapeDrawing ( bool  val)

Enable rendering of collision shapes (default: false).

Has no effect, unless called after the visual system is initialized and attached.

◆ EnableContactDrawing()

void chrono::irrlicht::ChVisualSystemIrrlicht::EnableContactDrawing ( ContactsDrawMode  mode)

Enable contact rendering (default: none).

Has no effect, unless called after the visual system is initialized and attached.

◆ EnableLinkDrawing()

void chrono::irrlicht::ChVisualSystemIrrlicht::EnableLinkDrawing ( LinkDrawMode  mode)

Enable rendering of link (joint) frames (default: none).

Has no effect, unless called after the visual system is initialized and attached.

◆ EnableLinkFrameDrawing()

void chrono::irrlicht::ChVisualSystemIrrlicht::EnableLinkFrameDrawing ( bool  val)

Enable rendering of link frames (default: false).

Has no effect, unless called after the visual system is initialized and attached.

◆ EnableShadows()

void chrono::irrlicht::ChVisualSystemIrrlicht::EnableShadows ( std::shared_ptr< ChPhysicsItem item = nullptr)

Enable shadow maps for all visual models in a scene or only for a single physics item.

A shadow-enabled light must be added to the scene with Shadow maps in Irrlicht may slow visualization a bit. Also, one must remember to add shadow-enabled light, using AddLightWithShadow(). Has no effect, unless called after Initialize().

◆ Initialize()

void chrono::irrlicht::ChVisualSystemIrrlicht::Initialize ( )
overridevirtual

Initialize the visualization system.

This creates the Irrlicht device using the current values for the optional device parameters.

Implements chrono::ChVisualSystem.

Reimplemented in chrono::modal::ChModalVisualSystemIrrlicht< ScalarType >, and chrono::vehicle::ChVehicleVisualSystemIrrlicht.

◆ Render()

void chrono::irrlicht::ChVisualSystemIrrlicht::Render ( )
overridevirtual

Draw all 3D shapes and GUI elements at the current frame.

This function is typically called inside a loop such as

   while(vis->Run()) {...}

Implements chrono::ChVisualSystem.

Reimplemented in chrono::modal::ChModalVisualSystemIrrlicht< ScalarType >, chrono::vehicle::ChVehicleVisualSystemIrrlicht, and chrono::robosimian::RoboSimianVisualSystemIrrlicht.

◆ Run()

bool chrono::irrlicht::ChVisualSystemIrrlicht::Run ( )
overridevirtual

Run the Irrlicht device.

Returns false if the device wants to be deleted.

Implements chrono::ChVisualSystem.

◆ SetAntialias()

void chrono::irrlicht::ChVisualSystemIrrlicht::SetAntialias ( bool  val)

Enable/disable antialias (default true).

Must be called before Initialize().

◆ SetCameraVertical()

void chrono::irrlicht::ChVisualSystemIrrlicht::SetCameraVertical ( CameraVerticalDir  vert)

Use Y-up camera rendering (default CameraVerticalDir::Y).

Must be called before Initialize().

◆ SetDriverType()

void chrono::irrlicht::ChVisualSystemIrrlicht::SetDriverType ( irr::video::E_DRIVER_TYPE  driver_type)

Set the device driver type (default irr::video::EDT_DIRECT3D9).

Must be called before Initialize().

◆ SetFullscreen()

void chrono::irrlicht::ChVisualSystemIrrlicht::SetFullscreen ( bool  val)

Enable/disable full-screen mode (default false).

Must be called before Initialize().

◆ SetInfoTab()

void chrono::irrlicht::ChVisualSystemIrrlicht::SetInfoTab ( int  ntab)

Set the active tab on the info panel.

Has no effect, unless called after the visual system is initialized and attached.

◆ SetJPEGQuality()

void chrono::irrlicht::ChVisualSystemIrrlicht::SetJPEGQuality ( unsigned int  quality)
inline

Set the JPEG quality level (between 0 and 100) for saved snapshots (default: 0).

A value of 0 sets the quality to 75%.

◆ SetLogLevel()

void chrono::irrlicht::ChVisualSystemIrrlicht::SetLogLevel ( irr::ELOG_LEVEL  log_level)

Set the Irrlicht logging level (default irr::ELL_INFORMATION).

Must be called before Initialize().

◆ SetShadows()

void chrono::irrlicht::ChVisualSystemIrrlicht::SetShadows ( bool  val)

Enable/disable shadows (default false).

Must be called before Initialize().

◆ SetWindowId()

void chrono::irrlicht::ChVisualSystemIrrlicht::SetWindowId ( void *  window_id)

Set the window ID.

Must be called before Initialize().

◆ SetWindowSize()

void chrono::irrlicht::ChVisualSystemIrrlicht::SetWindowSize ( unsigned int  width,
unsigned int  height 
)

Set the window size (default 640x480).

Must be called before Initialize().

◆ SetWindowTitle()

void chrono::irrlicht::ChVisualSystemIrrlicht::SetWindowTitle ( const std::string &  win_title)

Set the windoiw title (default "").

Must be called before Initialize().

◆ WriteImageToFile()

void chrono::irrlicht::ChVisualSystemIrrlicht::WriteImageToFile ( const std::string &  filename)
overridevirtual

Create a snapshot of the last rendered frame and save it to the provided file.

The file extension determines the image format.

Reimplemented from chrono::ChVisualSystem.


The documentation for this class was generated from the following files:
  • /builds/uwsbel/chrono/src/chrono_irrlicht/ChVisualSystemIrrlicht.h
  • /builds/uwsbel/chrono/src/chrono_irrlicht/ChVisualSystemIrrlicht.cpp