.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "_gallery/feature_demo/geometry_klein_bottle.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code. .. rst-class:: sphx-glr-example-title .. _sphx_glr__gallery_feature_demo_geometry_klein_bottle.py: Klein Bottle Geometry ===================== Example showing a Klein Bottle. Surface normals are shown on both sides of the mesh, in different colors. It can be seen how the object turns itself "inside out". .. GENERATED FROM PYTHON SOURCE LINES 10-47 .. image-sg:: /_gallery/feature_demo/images/sphx_glr_geometry_klein_bottle_001.webp :alt: geometry klein bottle :srcset: /_gallery/feature_demo/images/sphx_glr_geometry_klein_bottle_001.webp :class: sphx-glr-single-img .. code-block:: Python from rendercanvas.auto import RenderCanvas, loop import pygfx as gfx import pylinalg as la canvas = RenderCanvas() renderer = gfx.renderers.WgpuRenderer(canvas) scene = gfx.Scene() geometry = gfx.klein_bottle_geometry(10, stitch=False) geometry.texcoords = None material = gfx.MeshPhongMaterial(color=(1, 0.5, 0, 1), flat_shading=True) obj = gfx.Mesh(geometry, material) scene.add(obj) obj2 = gfx.Mesh(geometry, gfx.MeshNormalLinesMaterial(color="#00f", line_length=1)) obj3 = gfx.Mesh(geometry, gfx.MeshNormalLinesMaterial(color="#0ff", line_length=-1)) obj.add(obj2, obj3) camera = gfx.PerspectiveCamera(70, 1) camera.local.z = 30 scene.add(gfx.AmbientLight(), camera.add(gfx.DirectionalLight())) def animate(): rot = la.quat_from_euler((0.0071, 0.01), order="XY") obj.local.rotation = la.quat_mul(rot, obj.local.rotation) renderer.render(scene, camera) canvas.request_draw() if __name__ == "__main__": canvas.request_draw(animate) loop.run() .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 0.368 seconds) .. _sphx_glr_download__gallery_feature_demo_geometry_klein_bottle.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: geometry_klein_bottle.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: geometry_klein_bottle.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: geometry_klein_bottle.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_ .. only:: html Interactive example ------------------- Try this example in your browser using Pyodide. Might not work with all examples and all devices. Check the output and your browser's console for details. .. raw:: html