mirror of
https://github.com/mickael-kerjean/filestash
synced 2025-12-23 16:52:31 +01:00
40 lines
1.3 KiB
JavaScript
40 lines
1.3 KiB
JavaScript
import { settings_get } from "../../../lib/settings.js";
|
|
import * as THREE from "../../../lib/vendor/three/three.module.js";
|
|
|
|
const LIGHT_COLOR = 0xf5f5f5;
|
|
|
|
export default function({ scene, box, camera }) {
|
|
addLight(
|
|
scene,
|
|
new THREE.AmbientLight(LIGHT_COLOR),
|
|
settings_get("viewerpage_3d_light", 2),
|
|
);
|
|
|
|
// to make things "look nice", a good setup is to get lights positioned
|
|
// in a 3D cube with a couple "twist" in term of position & intensity
|
|
const l = addLight.bind(this, scene, new THREE.DirectionalLight(LIGHT_COLOR));
|
|
l(0.25, [plus(box.max.x*3), 0, 20]); // right
|
|
l(0.25, [minus(box.min.x*3), 0, -20]); // left
|
|
l(0.35, [0, plus(box.max.y*4), 20]); // top
|
|
l(0.35, [0, minus(box.min.y*4), -20]); // bottom
|
|
|
|
l(0.2, [0, 0, plus(7*box.max.z)]); // front
|
|
l(0.2, [0, 0, minus(15*box.min.z)]); // back
|
|
|
|
l(0.4, [camera.position.x, camera.position.y, camera.position.z]); // camera
|
|
}
|
|
|
|
function addLight(scene, light, intensity, pos = []) {
|
|
light = light.clone();
|
|
light.intensity = intensity;
|
|
light.position.set(...pos);
|
|
if (light.type !== "AmbientLight") light.castShadow = true;
|
|
scene.add(light);
|
|
}
|
|
|
|
const plus = notZero.bind(null, 1);
|
|
const minus = notZero.bind(null, -1);
|
|
function notZero(sgn, n) {
|
|
if (n === 0) return sgn;
|
|
return n;
|
|
}
|