UNPKG

mylingo3d

Version:

Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor

41 lines (31 loc) 1.3 kB
import { lazy } from "@lincode/utils" import { getSkyShaderOptions } from "../states/useSkyShaderOptions" import { Sky } from "three/examples/jsm/objects/Sky" import scene from "./scene" import { getSkyShader } from "../states/useSkyShader" import { vector3 } from "../display/utils/reusables" const lazySky = lazy(() => { const sky = new Sky() sky.scale.setScalar(450000) getSkyShaderOptions((effectController) => { const { uniforms } = sky.material uniforms["turbidity"].value = effectController.turbidity uniforms["rayleigh"].value = effectController.rayleigh uniforms["mieCoefficient"].value = effectController.mieCoefficient uniforms["mieDirectionalG"].value = effectController.mieDirectionalG const theta = Math.PI * (effectController.inclination - 0.5) const phi = 2 * Math.PI * (effectController.azimuth - 0.5) vector3.x = Math.cos(phi) vector3.y = Math.sin(phi) * Math.sin(theta) vector3.z = Math.sin(phi) * Math.cos(theta) uniforms["sunPosition"].value.copy(vector3) }) return sky }) let enabledOld = false getSkyShader((enabled) => { if (enabledOld === enabled) return enabledOld = enabled if (enabled) scene.add(lazySky()) else scene.remove(lazySky()) })