auto-git:
[change] src/viewport-three/viewport-host.ts
This commit is contained in:
@@ -4900,6 +4900,51 @@ export class ViewportHost {
|
|||||||
this.applyShadowState();
|
this.applyShadowState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private rebuildLightVolumes(document: SceneDocument) {
|
||||||
|
this.clearLightVolumes();
|
||||||
|
|
||||||
|
if (this.currentSimulationScene !== null) {
|
||||||
|
for (const lightVolume of this.currentSimulationScene.volumes.light) {
|
||||||
|
const renderObjects = this.createLightVolumeRenderObjects(lightVolume);
|
||||||
|
renderObjects.group.visible =
|
||||||
|
lightVolume.enabled && this.displayMode !== "wireframe";
|
||||||
|
this.lightVolumeGroup.add(renderObjects.group);
|
||||||
|
this.lightVolumeRenderObjects.set(lightVolume.brushId, renderObjects);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const brush of Object.values(document.brushes)) {
|
||||||
|
if (
|
||||||
|
!brush.enabled ||
|
||||||
|
!brush.visible ||
|
||||||
|
brush.kind !== "box" ||
|
||||||
|
brush.volume.mode !== "light"
|
||||||
|
) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const renderObjects = this.createLightVolumeRenderObjects({
|
||||||
|
brushId: brush.id,
|
||||||
|
enabled: brush.visible,
|
||||||
|
center: brush.center,
|
||||||
|
rotationDegrees: brush.rotationDegrees,
|
||||||
|
size: brush.size,
|
||||||
|
colorHex: brush.volume.light.colorHex,
|
||||||
|
lights: deriveBoxLightVolumePointLights({
|
||||||
|
size: brush.size,
|
||||||
|
intensity: brush.volume.light.intensity,
|
||||||
|
padding: brush.volume.light.padding,
|
||||||
|
falloff: brush.volume.light.falloff
|
||||||
|
})
|
||||||
|
});
|
||||||
|
renderObjects.group.visible = this.displayMode !== "wireframe";
|
||||||
|
this.lightVolumeGroup.add(renderObjects.group);
|
||||||
|
this.lightVolumeRenderObjects.set(brush.id, renderObjects);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private rebuildBrushMeshes(
|
private rebuildBrushMeshes(
|
||||||
document: SceneDocument,
|
document: SceneDocument,
|
||||||
selection: EditorSelection
|
selection: EditorSelection
|
||||||
@@ -5668,6 +5713,59 @@ export class ViewportHost {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private createLightVolumeRenderObjects(lightVolume: {
|
||||||
|
brushId: string;
|
||||||
|
enabled: boolean;
|
||||||
|
center: Vec3;
|
||||||
|
rotationDegrees: Vec3;
|
||||||
|
size: Vec3;
|
||||||
|
colorHex: string;
|
||||||
|
lights: Array<{
|
||||||
|
localPosition: Vec3;
|
||||||
|
intensity: number;
|
||||||
|
distance: number;
|
||||||
|
decay: number;
|
||||||
|
}>;
|
||||||
|
}): LightVolumeRenderObjects {
|
||||||
|
const group = new Group();
|
||||||
|
const lights: PointLight[] = [];
|
||||||
|
|
||||||
|
group.position.set(
|
||||||
|
lightVolume.center.x,
|
||||||
|
lightVolume.center.y,
|
||||||
|
lightVolume.center.z
|
||||||
|
);
|
||||||
|
group.rotation.set(
|
||||||
|
(lightVolume.rotationDegrees.x * Math.PI) / 180,
|
||||||
|
(lightVolume.rotationDegrees.y * Math.PI) / 180,
|
||||||
|
(lightVolume.rotationDegrees.z * Math.PI) / 180
|
||||||
|
);
|
||||||
|
group.visible = lightVolume.enabled;
|
||||||
|
|
||||||
|
for (const derivedLight of lightVolume.lights) {
|
||||||
|
const light = new PointLight(
|
||||||
|
lightVolume.colorHex,
|
||||||
|
derivedLight.intensity,
|
||||||
|
derivedLight.distance,
|
||||||
|
derivedLight.decay
|
||||||
|
);
|
||||||
|
light.castShadow = false;
|
||||||
|
light.shadow.autoUpdate = false;
|
||||||
|
light.position.set(
|
||||||
|
derivedLight.localPosition.x,
|
||||||
|
derivedLight.localPosition.y,
|
||||||
|
derivedLight.localPosition.z
|
||||||
|
);
|
||||||
|
group.add(light);
|
||||||
|
lights.push(light);
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
group,
|
||||||
|
lights
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
private createPointLightRuntimeObjects(
|
private createPointLightRuntimeObjects(
|
||||||
entity: Pick<
|
entity: Pick<
|
||||||
PointLightEntity,
|
PointLightEntity,
|
||||||
|
|||||||
Reference in New Issue
Block a user