Вы можете использовать camera.position
для расчета наилучшей точки обзора.Во-первых, вы должны выяснить, какова желаемая позиция (я не уверен, как размещается деревянная доска, но эта позиция кажется близкой к: { x: 6.8, y: 0.6, z: -1.8}
)
var vantagePoint = new THREE.Vector3(6.8, 0.6, -1.8);
var distance = 100;
var normalized = 1;
var endColor = new THREE.Color(0xff9900);
var startColor = new THREE.Color(0x0099ff);
scene.background = startColor;
animate() {
distance = vantagePoint.distanceTo(camera.position);
normalized = THREE.Math.smoothstep(distance, 5, 100); // Converts [1, 100] => [0, 1]
// Resets the color on each frame
startColor.set(0x0099ff);
startColor.lerp(endColor, normalized);
}
Чем ближе0, тем ближе вы видите череп.Затем вы можете использовать это значение, чтобы изменить цвет scene.background
.Все, что больше 10, и вам «холодно», и вы становитесь более горячими, когда приближаетесь к 0.
https://threejs.org/docs/#api/en/math/Vector3.distanceTo
Обновление:
Затем вы можете преобразовать расстояние внормализованное значение в диапазоне [0, 1]
с использованием Math.smoothstep()
.Затем интерполируйте значение цветов с этим нормализованным значением, используя Color.lerp