def show(object: WorldObject, up=None): """Visualize a given WorldObject in a new window with an interactive camera. Parameters: object (WorldObject): The object to show. up (Vector3): Optional. Configure the up vector for the camera controls. """ from wgpu.gui.auto import WgpuCanvas, run if isinstance(object, Scene): scene = object else: scene = Scene() scene.add(object) background = Background(None, BackgroundMaterial((0, 1, 0, 1), (0, 1, 1, 1))) scene.add(background) camera = PerspectiveCamera(70, 16 / 9) look_at = camera.show_object(object) canvas = WgpuCanvas() renderer = WgpuRenderer(canvas) controls = OrbitControls(camera.position.clone(), look_at, up=up) controls.add_default_event_handlers(canvas, camera) def animate(): controls.update_camera(camera) renderer.render(scene, camera) canvas.request_draw(animate) run()
geometry = gfx.torus_knot_geometry(1, 0.3, 128, 16) material1 = gfx.MeshPhongMaterial(color=(0.5, 0.5, 0.5, 1.0)) material2 = gfx.MeshSliceMaterial(thickness=8, color=(1, 1, 0, 1), plane=(0, 0, 1, 0)) obj1 = gfx.Mesh(geometry, material1) obj2 = gfx.Mesh(geometry, material2) scene.add(obj1) scene.add(obj2) camera = gfx.PerspectiveCamera(70, 2) camera.position.z = 4 def animate(): dist = material2.plane[3] dist += 0.02 if dist > 1: dist = -1.5 material2.plane = 1, 0, 1, dist renderer.render(scene, camera) canvas.request_draw() if __name__ == "__main__": canvas.request_draw(animate) run()