| 2367 | |
| 2368 | |
| 2369 | class Canvas_view(): |
| 2370 | def __init__(self, |
| 2371 | fov, |
| 2372 | verts, |
| 2373 | faces, |
| 2374 | colors, |
| 2375 | canvas_size, |
| 2376 | factor=1, |
| 2377 | bgcolor='gray', |
| 2378 | proj='perspective', |
| 2379 | ): |
| 2380 | self.canvas = scene.SceneCanvas(bgcolor=bgcolor, size=(canvas_size*factor, canvas_size*factor)) |
| 2381 | self.view = self.canvas.central_widget.add_view() |
| 2382 | self.view.camera = 'perspective' |
| 2383 | self.view.camera.fov = fov |
| 2384 | self.mesh = visuals.Mesh(shading=None) |
| 2385 | self.mesh.attach(Alpha(1.0)) |
| 2386 | self.view.add(self.mesh) |
| 2387 | self.tr = self.view.camera.transform |
| 2388 | self.mesh.set_data(vertices=verts, faces=faces, vertex_colors=colors[:, :3]) |
| 2389 | self.translate([0,0,0]) |
| 2390 | self.rotate(axis=[1,0,0], angle=180) |
| 2391 | self.view_changed() |
| 2392 | |
| 2393 | def translate(self, trans=[0,0,0]): |
| 2394 | self.tr.translate(trans) |
| 2395 | |
| 2396 | def rotate(self, axis=[1,0,0], angle=0): |
| 2397 | self.tr.rotate(axis=axis, angle=angle) |
| 2398 | |
| 2399 | def view_changed(self): |
| 2400 | self.view.camera.view_changed() |
| 2401 | |
| 2402 | def render(self): |
| 2403 | return self.canvas.render() |
| 2404 | |
| 2405 | def reinit_mesh(self, verts, faces, colors): |
| 2406 | self.mesh.set_data(vertices=verts, faces=faces, vertex_colors=colors[:, :3]) |
| 2407 | |
| 2408 | def reinit_camera(self, fov): |
| 2409 | self.view.camera.fov = fov |
| 2410 | self.view.camera.view_changed() |
| 2411 | |
| 2412 | |
| 2413 | def output_3d_photo(verts, colors, faces, Height, Width, hFov, vFov, tgt_poses, video_traj_types, ref_pose, |