UNPKG

playcanvas

Version:

PlayCanvas WebGL game engine

40 lines (37 loc) 1.08 kB
import { Vec3 } from '../../core/math/vec3.js'; import { LIGHTTYPE_DIRECTIONAL } from '../constants.js'; const lightCubeDir = [ new Vec3(-1, 0, 0), new Vec3(1, 0, 0), new Vec3(0, -1, 0), new Vec3(0, 1, 0), new Vec3(0, 0, -1), new Vec3(0, 0, 1) ]; class LightCube { update(ambientLight, lights) { const colors = this.colors; const { r, g, b } = ambientLight; for(let j = 0; j < 6; j++){ colors[j * 3] = r; colors[j * 3 + 1] = g; colors[j * 3 + 2] = b; } for(let j = 0; j < lights.length; j++){ const light = lights[j]; if (light._type === LIGHTTYPE_DIRECTIONAL) { for(let c = 0; c < 6; c++){ const weight = Math.max(lightCubeDir[c].dot(light._direction), 0) * light._intensity; const lightColor = light._color; colors[c * 3] += lightColor.r * weight; colors[c * 3 + 1] += lightColor.g * weight; colors[c * 3 + 2] += lightColor.b * weight; } } } } constructor(){ this.colors = new Float32Array(6 * 3); } } export { LightCube };