|
.. _viewer_guide: |
|
|
|
Live Scene Viewer |
|
================= |
|
|
|
Standard Usage |
|
-------------- |
|
In addition to the offscreen renderer, Pyrender comes with a live scene viewer. |
|
In its standard invocation, calling the :class:`.Viewer`'s constructor will |
|
immediately pop a viewing window that you can navigate around in. |
|
|
|
>>> pyrender.Viewer(scene) |
|
|
|
By default, the viewer uses your scene's lighting. If you'd like to start with |
|
some additional lighting that moves around with the camera, you can specify that |
|
with: |
|
|
|
>>> pyrender.Viewer(scene, use_raymond_lighting=True) |
|
|
|
For a full list of the many options that the :class:`.Viewer` supports, check out its |
|
documentation. |
|
|
|
.. image:: /_static/rotation.gif |
|
|
|
Running the Viewer in a Separate Thread |
|
--------------------------------------- |
|
If you'd like to animate your models, you'll want to run the viewer in a |
|
separate thread so that you can update the scene while the viewer is running. |
|
To do this, first pop the viewer in a separate thread by calling its constructor |
|
with the ``run_in_thread`` option set: |
|
|
|
>>> v = pyrender.Viewer(scene, run_in_thread=True) |
|
|
|
Then, you can manipulate the :class:`.Scene` while the viewer is running to |
|
animate things. However, be careful to acquire the viewer's |
|
:attr:`.Viewer.render_lock` before editing the scene to prevent data corruption: |
|
|
|
>>> i = 0 |
|
>>> while True: |
|
... pose = np.eye(4) |
|
... pose[:3,3] = [i, 0, 0] |
|
... v.render_lock.acquire() |
|
... scene.set_pose(mesh_node, pose) |
|
... v.render_lock.release() |
|
... i += 0.01 |
|
|
|
.. image:: /_static/scissors.gif |
|
|
|
You can wait on the viewer to be closed manually: |
|
|
|
>>> while v.is_active: |
|
... pass |
|
|
|
Or you can close it from the main thread forcibly. |
|
Make sure to still loop and block for the viewer to actually exit before using |
|
the scene object again. |
|
|
|
>>> v.close_external() |
|
>>> while v.is_active: |
|
... pass |
|
|
|
|