From 693f0391716f4bd8b2d9bb1427db82ed47a5cf55 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Sun, 5 Apr 2026 06:54:12 +0200 Subject: [PATCH] Add method to apply local light render object transform --- src/viewport-three/viewport-host.js | 37 +++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/viewport-three/viewport-host.js b/src/viewport-three/viewport-host.js index a51e73d0..f2e7a788 100644 --- a/src/viewport-three/viewport-host.js +++ b/src/viewport-three/viewport-host.js @@ -1512,6 +1512,24 @@ export class ViewportHost { break; } } + applyLocalLightRenderObjectTransform(entity) { + const renderObjects = this.localLightRenderObjects.get(entity.id); + if (renderObjects === undefined) { + return; + } + switch (entity.kind) { + case "pointLight": + renderObjects.group.position.set(entity.position.x, entity.position.y, entity.position.z); + renderObjects.group.rotation.set(0, 0, 0); + renderObjects.group.quaternion.identity(); + break; + case "spotLight": + this.applySpotLightGroupTransform(renderObjects.group, entity.position, entity.direction); + break; + default: + break; + } + } applyModelInstanceRenderObjectTransform(modelInstance) { const renderGroup = this.modelRenderObjects.get(modelInstance.id); if (renderGroup === undefined) { @@ -1531,6 +1549,7 @@ export class ViewportHost { } for (const entity of getEntityInstances(this.currentDocument.entities)) { this.applyEntityRenderObjectTransform(entity); + this.applyLocalLightRenderObjectTransform(entity); } for (const modelInstance of getModelInstances(this.currentDocument.modelInstances)) { this.applyModelInstanceRenderObjectTransform(modelInstance); @@ -1584,6 +1603,10 @@ export class ViewportHost { ...currentEntity, position: this.currentTransformSession.preview.position }); + this.applyLocalLightRenderObjectTransform({ + ...currentEntity, + position: this.currentTransformSession.preview.position + }); break; case "spotLight": this.applyEntityRenderObjectTransform({ @@ -1593,6 +1616,13 @@ export class ViewportHost { ? this.currentTransformSession.preview.rotation.direction : currentEntity.direction }); + this.applyLocalLightRenderObjectTransform({ + ...currentEntity, + position: this.currentTransformSession.preview.position, + direction: this.currentTransformSession.preview.rotation.kind === "direction" + ? this.currentTransformSession.preview.rotation.direction + : currentEntity.direction + }); break; case "playerStart": case "teleportTarget": @@ -1603,6 +1633,13 @@ export class ViewportHost { ? this.currentTransformSession.preview.rotation.yawDegrees : currentEntity.yawDegrees }); + this.applyLocalLightRenderObjectTransform({ + ...currentEntity, + position: this.currentTransformSession.preview.position, + yawDegrees: this.currentTransformSession.preview.rotation.kind === "yaw" + ? this.currentTransformSession.preview.rotation.yawDegrees + : currentEntity.yawDegrees + }); break; } break;