Skip to content

Commit ff8a9ca

Browse files
DeepMindsaran-t
authored andcommitted
SceneCamera and Viewer: make camera properties factor and zoom configurable.
PiperOrigin-RevId: 403369158 Change-Id: Ief0fccec8ab1dcab49a7e71ffc60bc684c57186b
1 parent ca17c48 commit ff8a9ca

3 files changed

Lines changed: 25 additions & 6 deletions

File tree

dm_control/viewer/renderer.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -372,7 +372,12 @@ def select_prev_labeling_mode(self):
372372
class SceneCamera:
373373
"""A camera used to navigate around and render the scene."""
374374

375-
def __init__(self, model, data, options, settings=None):
375+
def __init__(self,
376+
model,
377+
data,
378+
options,
379+
settings=None,
380+
zoom_factor=_FULL_SCENE_ZOOM_FACTOR):
376381
"""Instance initializer.
377382
378383
Args:
@@ -381,6 +386,7 @@ def __init__(self, model, data, options, settings=None):
381386
options: RenderSettings instance.
382387
settings: Optional, internal camera settings obtained from another
383388
SceneCamera instance using 'settings' property.
389+
zoom_factor: The initial zoom factor for zooming into the scene.
384390
"""
385391
# Design notes:
386392
# We need to recreate the camera for each new model, because each model
@@ -395,9 +401,13 @@ def __init__(self, model, data, options, settings=None):
395401
self._camera.trackbodyid = _NO_BODY_TRACKED_INDEX
396402
self._camera.fixedcamid = _FREE_CAMERA_INDEX
397403
self._camera.type_ = enums.mjtCamera.mjCAMERA_FREE
404+
self._zoom_factor = zoom_factor
398405

399406
if settings is not None:
407+
self._settings = settings
400408
self.settings = settings
409+
else:
410+
self._settings = self._camera
401411

402412
def set_freelook_mode(self):
403413
"""Enables 6 degrees of freedom of movement for the camera."""
@@ -493,7 +503,9 @@ def render(self, perturbation=None):
493503
def zoom_to_scene(self):
494504
"""Zooms in on the entire scene."""
495505
self.look_at(self._model.stat.center[:],
496-
_FULL_SCENE_ZOOM_FACTOR * self._model.stat.extent)
506+
self._zoom_factor * self._model.stat.extent)
507+
508+
self.settings = self._settings
497509

498510
@property
499511
def transform(self):

dm_control/viewer/viewer.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,17 +84,23 @@
8484
# Distance, in meters, at which to focus on the clicked object.
8585
_LOOK_AT_DISTANCE = 1.5
8686

87+
# Zoom factor used when zooming in on the entire scene.
88+
_FULL_SCENE_ZOOM_FACTOR = 1.5
89+
8790

8891
class Viewer:
8992
"""Viewport displaying the contents of a physics world."""
9093

91-
def __init__(self, viewport, mouse, keyboard):
94+
def __init__(self, viewport, mouse, keyboard, camera_settings=None,
95+
zoom_factor=_FULL_SCENE_ZOOM_FACTOR):
9296
"""Instance initializer.
9397
9498
Args:
9599
viewport: Render viewport, instance of renderer.Viewport.
96100
mouse: A mouse device.
97101
keyboard: A keyboard device.
102+
camera_settings: Properties of the scene MjvCamera.
103+
zoom_factor: Initial scale factor for zooming into the scene.
98104
"""
99105
self._viewport = viewport
100106
self._mouse = mouse
@@ -104,11 +110,12 @@ def __init__(self, viewport, mouse, keyboard):
104110
self._input_map = user_input.InputMap(mouse, keyboard)
105111

106112
self._camera = None
107-
self._camera_settings = None
113+
self._camera_settings = camera_settings
108114
self._renderer = None
109115
self._manipulator = None
110116
self._free_camera = None
111117
self._camera_select = None
118+
self._zoom_factor = zoom_factor
112119

113120
def __del__(self):
114121
del self._camera
@@ -127,7 +134,7 @@ def initialize(self, physics, renderer_instance, touchpad):
127134
"""
128135
self._camera = renderer.SceneCamera(
129136
physics.model, physics.data, self._render_settings,
130-
self._camera_settings)
137+
settings=self._camera_settings, zoom_factor=self._zoom_factor)
131138

132139
self._manipulator = ManipulationController(
133140
self._viewport, self._camera, self._mouse)

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ def is_excluded(s):
177177

178178
setup(
179179
name='dm_control',
180-
version='0.0.401196677',
180+
version='0.0.403369158',
181181
description='Continuous control environments and MuJoCo Python bindings.',
182182
author='DeepMind',
183183
license='Apache License, Version 2.0',

0 commit comments

Comments
 (0)