Esempio n. 1
0
 def __init__(self,
              render_scene=None,
              plane_grid_spacing=1.,
              plane_grid_num_of_lines=10,
              spheres_count=(8, 8)) -> None:
     """ Base class for PyRender viewer and offscreen renderer. """
     ViewerBase.__init__(self)
     self.spheres_count = spheres_count
     self.plane_grid_num_of_lines = plane_grid_num_of_lines
     self.plane_grid_spacing = plane_grid_spacing
     if render_scene is None:
         render_scene = PyRenderScene()
         render_scene.bg_color = np.array([0.75] * 3)
     if render_scene.main_camera_node is None:
         cam = PerspectiveCamera(yfov=np.deg2rad(60),
                                 aspectRatio=1.414,
                                 znear=0.005)
         cam_pose = np.eye(4)
         cam_pose[:3, 3] = RoboticTrackball.spherical_to_cartesian(
             3., 0., np.deg2rad(45.), target=np.zeros(3))
         cam_pose[:3, :3] = RoboticTrackball.look_at_rotation(
             eye=cam_pose[:3, 3], target=np.zeros(3), up=[0, 0, 1])
         nc = Node(camera=cam, matrix=cam_pose)
         render_scene.add_node(nc)
         render_scene.main_camera_node = nc
     self.render_scene = render_scene
     self.nodes_and_actors = []
Esempio n. 2
0
 def test_spherical_coordinates_with_target(self):
     target = np.array([1, 2, 3])
     pos = RoboticTrackball.spherical_to_cartesian(1,
                                                   np.pi / 2,
                                                   np.pi / 4,
                                                   target=target)
     d, a, e = RoboticTrackball.cartesian_to_spherical(pos, target=target)
     self.assertAlmostEqual(d, 1.)
     self.assertAlmostEqual(a, np.pi / 2)
     self.assertAlmostEqual(e, np.pi / 4)
Esempio n. 3
0
 def test_spherical_coordinates(self):
     pos = RoboticTrackball.spherical_to_cartesian(1,
                                                   np.pi / 2,
                                                   np.pi / 4,
                                                   target=np.zeros(3))
     d, a, e = RoboticTrackball.cartesian_to_spherical(pos,
                                                       target=np.zeros(3))
     self.assertAlmostEqual(d, 1.)
     self.assertAlmostEqual(a, np.pi / 2)
     self.assertAlmostEqual(e, np.pi / 4)
Esempio n. 4
0
    def __init__(self,
                 render_scene=None,
                 viewport_size=None,
                 render_flags=None,
                 viewer_flags=None,
                 registered_keys=None,
                 run_in_thread=True,
                 video_filename=None,
                 **kwargs):
        """
            Use render_scene to specify camera or lighting or additional geometries if required.
            Additional viewer flags:
                - axes_scale - size of coordinate axes
        """

        if render_scene is None:
            render_scene = pyrender.Scene()
            render_scene.bg_color = np.array([0.75] * 3)
        if render_scene.main_camera_node is None:
            cam = pyrender.PerspectiveCamera(yfov=np.deg2rad(60),
                                             aspectRatio=1.414,
                                             znear=0.005)
            cam_pose = np.eye(4)
            cam_pose[:3, 3] = RoboticTrackball.spherical_to_cartesian(
                3., 0., np.deg2rad(45.), target=np.zeros(3))
            cam_pose[:3, :3] = RoboticTrackball.look_at_rotation(
                eye=cam_pose[:3, 3], target=np.zeros(3), up=[0, 0, 1])
            nc = pyrender.Node(camera=cam, matrix=cam_pose)
            render_scene.add_node(nc)
            render_scene.main_camera_node = nc

        _viewer_flags = {
            'view_center': np.zeros(3),
            'window_title': 'PyPhysX Scene Viewer',
            'show_world_axis': True,
            'show_mesh_axes': False,
            'axes_scale': 0.5,
            'use_raymond_lighting': True,
            'plane_grid_spacing': 1.,
            'plane_grid_num_of_lines': 10,
            'spheres_count': [8, 8],
        }
        if viewer_flags is not None:
            _viewer_flags.update(viewer_flags)

        super().__init__(render_scene, viewport_size, render_flags,
                         _viewer_flags, registered_keys, run_in_thread,
                         **kwargs)
        self.nodes_and_actors = []
        fps = self.viewer_flags['refresh_rate']
        self.video_writer = imageio.get_writer(
            video_filename, fps=fps) if video_filename is not None else None
 def test_move_target90deg(self):
     pose = np.eye(4)
     pose[:3,
          3] = RoboticTrackball.spherical_to_cartesian(3.,
                                                       np.deg2rad(90.),
                                                       np.deg2rad(45.),
                                                       target=np.zeros(3))
     pose[:3, :3] = RoboticTrackball.look_at_rotation(eye=pose[:3, 3],
                                                      target=np.zeros(3),
                                                      up=[0, 0, 1])
     trackball = RoboticTrackball(pose, (640, 480), 1.)
     trackball.move_target(np.array([1., 2., 3.]))
     self.assertAlmostEqual(trackball._n_target[0], -2.)
     self.assertAlmostEqual(trackball._n_target[1], 1.)
     self.assertAlmostEqual(trackball._n_target[2], 3.)
 def test_rotate(self):
     pose = np.eye(4)
     pose[:3,
          3] = RoboticTrackball.spherical_to_cartesian(3.,
                                                       0.,
                                                       np.deg2rad(45.),
                                                       target=np.zeros(3))
     pose[:3, :3] = RoboticTrackball.look_at_rotation(eye=pose[:3, 3],
                                                      target=np.zeros(3),
                                                      up=[0, 0, 1])
     trackball = RoboticTrackball(pose, (640, 480), 1.)
     trackball.set_state(RoboticTrackball.STATE_ROTATE)
     trackball.drag([10, 20])  # 10px in azimuth, 20px in elevation
     npose = trackball._n_pose
     d, a, e = RoboticTrackball.cartesian_to_spherical(
         npose[:3, 3], trackball._target)
     self.assertAlmostEqual(d, 3.)
     self.assertAlmostEqual(a, 0. - 10 * 5e-1 / (0.3 * 480))
     self.assertAlmostEqual(e, np.deg2rad(45.) + 20 * 5e-1 / (0.3 * 480))