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()
scene.add(plane1, plane2, plane3) camera = gfx.OrthographicCamera(100, 100) @canvas.add_event_handler("key_down") def handle_event(event): if event["key"] == " ": print("Rotating scene element order") scene.add(scene.children[0]) canvas.request_draw() elif event["key"] in "0123456789": m = [ None, "opaque", "ordered1", "ordered2", "weighted", "weighted_depth", "weighted_plus", ] mode = m[int(event["key"])] renderer.blend_mode = mode print("Selecting blend_mode", mode) if __name__ == "__main__": print(__doc__) canvas.request_draw(lambda: renderer.render(scene, camera)) run()
[+1, +1, 0]], np.float32, ) geometry2 = gfx.Geometry(positions=positions * 250) material2 = gfx.LineMaterial(thickness=5.0, color=(0.8, 0.0, 0.2, 1.0)) line = gfx.Line(geometry2, material2) scene.add(line) camera = gfx.PerspectiveCamera(70, 16 / 9) camera.position.z = 400 # Define animation functions. Each renders the scene into its own canvas. def animate_a(): rot = gfx.linalg.Quaternion().set_from_euler(gfx.linalg.Euler(0.005, 0.01)) cube.rotation.multiply(rot) renderer_a.render(scene, camera) canvas_a.request_draw() def animate_b(): renderer_b.render(scene, camera) canvas_b.request_draw() if __name__ == "__main__": canvas_a.request_draw(animate_a) canvas_b.request_draw(animate_b) run()