def test_perspective_camera_near_far(): for near, far in [ (0.1, 100), (0.1, 10000), (10, 1200), (200, 300), (490, 500), ]: camera = gfx.PerspectiveCamera(50, 1, near, far) camera.update_projection_matrix() assert camera.near == near assert camera.far == far _run_for_camera(camera, near, far, False)
canvas = WgpuCanvas() renderer = gfx.renderers.WgpuRenderer(canvas) scene = gfx.Scene() 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()
im = imageio.imread("imageio:chelsea.png") tex = gfx.Texture(im, dim=2).get_view(filter="linear") material = gfx.MeshBasicMaterial(map=tex) geometry = gfx.box_geometry(100, 100, 100) cubes = [gfx.Mesh(geometry, material) for i in range(8)] for i, cube in enumerate(cubes): cube.position.set(350 - i * 100, 0, 0) scene.add(cube) background = gfx.Background(None, gfx.BackgroundMaterial((0, 1, 0, 1), (0, 1, 1, 1))) scene.add(background) camera = gfx.PerspectiveCamera(70, 16 / 9) camera.position.z = 500 def animate(): for i, cube in enumerate(cubes): rot = gfx.linalg.Quaternion().set_from_euler( gfx.linalg.Euler(0.01 * i, 0.02 * i)) cube.rotation.multiply(rot) renderer.render(scene, camera) canvas.request_draw() if __name__ == "__main__": canvas.request_draw(animate)
texture1 = gfx.Texture(dim=2, size=(200, 200, 1), format="rgba8unorm") renderer1 = gfx.renderers.WgpuRenderer(texture1) scene1 = gfx.Scene() background1 = gfx.Background(None, gfx.BackgroundMaterial((0, 0.5, 0, 1))) scene1.add(background1) im = imageio.imread("imageio:bricks.jpg").astype(np.float32) / 255 tex = gfx.Texture(im, dim=2).get_view(filter="linear", address_mode="repeat") geometry1 = gfx.box_geometry(200, 200, 200) material1 = gfx.MeshPhongMaterial(map=tex, color=(1, 1, 0, 1.0)) cube1 = gfx.Mesh(geometry1, material1) scene1.add(cube1) camera1 = gfx.PerspectiveCamera(70, 16 / 9) camera1.position.z = 300 # Then create the actual scene, in the visible canvas canvas2 = WgpuCanvas() renderer2 = gfx.renderers.WgpuRenderer(canvas2) scene2 = gfx.Scene() geometry2 = gfx.box_geometry(200, 200, 200) material2 = gfx.MeshPhongMaterial(map=texture1.get_view(filter="linear")) cube2 = gfx.Mesh(geometry2, material2) scene2.add(cube2)
scene = gfx.Scene() # %% Select near, far, and camera # With the ortho camera, you can pick any values you like, also negative # near values. With the perspective camera you'll want to pick a small # positive near-value, and a relatively small value for the far-value # as well, otherwise the distant squares become smaller than 1 pixel ;) # Select camera and matchingclipping planes if True: near, far = -40, 300 camera = gfx.OrthographicCamera(2.2, 2.2, near, far) else: near, far = 5, 10 camera = gfx.PerspectiveCamera(50, 1, near, far) # %% Create four planes near the z-clipping planes geometry = gfx.plane_geometry(1, 1) green_material = gfx.MeshBasicMaterial(color=(0, 0.8, 0.2, 1)) greener_material = gfx.MeshBasicMaterial(color=(0, 1, 0, 1)) red_material = gfx.MeshBasicMaterial(color=(1, 0, 0, 1)) plane1 = gfx.Mesh(geometry, green_material) plane2 = gfx.Mesh(geometry, red_material) plane3 = gfx.Mesh(geometry, greener_material) plane4 = gfx.Mesh(geometry, red_material) # Note the negation of near and far in the plane's position. This is # because the camera looks down the z-axis: more negative means moving