MCPcopy Create free account
hub / github.com/Robbyant/lingbot-map / render_frame

Method render_frame

demo_render/rgbd_render/renderer.py:139–188  ·  view source on GitHub ↗

Render one frame: LOD select -> overlays -> render -> return (H,W,3) uint8.

(self, scene: Scene, camera: Camera, frame_idx: int,
                     overlays: Optional[List[Overlay]] = None)

Source from the content-addressed store, hash-verified

137 self._active_extra_geoms: set = set()
138
139 def render_frame(self, scene: Scene, camera: Camera, frame_idx: int,
140 overlays: Optional[List[Overlay]] = None) -> np.ndarray:
141 """Render one frame: LOD select -> overlays -> render -> return (H,W,3) uint8."""
142 o3d = _import_open3d()
143
144 vis_xyz, vis_rgb = scene.octree.lod_select(
145 camera.w2c(),
146 *camera.fov_intrinsics(self.width, self.height),
147 self.width, self.height,
148 self.config.near, self.config.far,
149 frame_idx, self.config.lod_target_pixels)
150 vis_frames = None
151
152 extra_geoms = []
153 if overlays:
154 for overlay in overlays:
155 vis_xyz, vis_rgb, geoms = overlay.apply(
156 scene, camera, frame_idx, vis_xyz, vis_rgb, vis_frames)
157 extra_geoms.extend(geoms)
158
159 self._pcd_buf.points = o3d.utility.Vector3dVector(vis_xyz.astype(np.float64))
160 self._pcd_buf.colors = o3d.utility.Vector3dVector(
161 np.clip(vis_rgb, 0, 1).astype(np.float64))
162
163 if hasattr(self._renderer.scene, 'update_geometry'):
164 flags = (o3d.visualization.rendering.Scene.UPDATE_POINTS_FLAG |
165 o3d.visualization.rendering.Scene.UPDATE_COLORS_FLAG)
166 self._renderer.scene.update_geometry('pcd', self._pcd_buf, flags)
167 else:
168 self._renderer.scene.remove_geometry('pcd')
169 self._renderer.scene.add_geometry('pcd', self._pcd_buf, self._mat)
170
171 self._renderer.setup_camera(
172 camera.fov_deg,
173 camera.center.astype(np.float64),
174 camera.eye.astype(np.float64),
175 camera.up.astype(np.float64))
176
177 # EDL: clear stale overlays, grab point-cloud-only depth,
178 # then add current overlays
179 edl_depth = None
180 if self.config.edl:
181 self._update_extra_geoms([])
182 edl_depth = np.asarray(
183 self._renderer.render_to_depth_image(z_in_view_space=True)
184 ).astype(np.float32)
185
186 self._update_extra_geoms(extra_geoms)
187
188 return self._render_and_postprocess(edl_depth)
189
190 def render_frame_direct(self, vis_xyz: np.ndarray, vis_rgb: np.ndarray,
191 extra_geoms: list, camera: Camera) -> np.ndarray:

Callers 1

_run_serialMethod · 0.95

Calls 8

_update_extra_geomsMethod · 0.95
lod_selectMethod · 0.80
w2cMethod · 0.80
update_geometryMethod · 0.80
_import_open3dFunction · 0.70
fov_intrinsicsMethod · 0.45
applyMethod · 0.45

Tested by

no test coverage detected