Pārlūkot izejas kodu

implement spotlight

Falko Schindler 3 gadi atpakaļ
vecāks
revīzija
157e9767e3

+ 2 - 0
nicegui/elements/scene.js

@@ -187,6 +187,8 @@ Vue.component("scene", {
         const geometry = texture_geometry(coords);
         const material = texture_material(texture_loader.load(url));
         mesh = new THREE.Mesh(geometry, material);
+      } else if (type == "spot_light") {
+        mesh = new THREE.SpotLight(...args);
       } else {
         let geometry;
         const wireframe = args.pop();

+ 1 - 0
nicegui/elements/scene.py

@@ -79,6 +79,7 @@ class Scene(Element):
     from .scene_objects import QuadraticBezierTube as quadratic_bezier_tube
     from .scene_objects import Ring as ring
     from .scene_objects import Sphere as sphere
+    from .scene_objects import SpotLight as spot_light
     from .scene_objects import Stl as stl
     from .scene_objects import Texture as texture
 

+ 13 - 0
nicegui/elements/scene_objects.py

@@ -143,3 +143,16 @@ class Texture(Object3D):
         self.args[1] = coordinates
         for socket in WebPage.sockets.get(self.page.page_id, {}).values():
             await self.view.run_method(f'set_texture_coordinates("{self.id}", {coordinates})', socket)
+
+
+class SpotLight(Object3D):
+
+    def __init__(self,
+                 color: str = '#ffffff',
+                 intensity: float = 1.0,
+                 distance: float = 0.0,
+                 angle: float = np.pi / 3,
+                 penumbra: float = 0.0,
+                 decay: float = 1.0,
+                 ):
+        super().__init__('spot_light', color, intensity, distance, angle, penumbra, decay)