Home Reference Source

src/helpers/lights/directional.js

import { vec3 } from 'gl-matrix';
import Model from '../../core/model';
import Basic from '../../material/basic';
import { GL_LINES } from '../../session';

class DirectionalHelper extends Model {
    constructor(props) {
        const geometry = {
            positions: [],
            indices: [],
        };

        const size = 25;

        geometry.positions.push(-size, size, 0); // 0
        geometry.positions.push(size, size, 0); // 1
        geometry.positions.push(size, -size, 0); // 2
        geometry.positions.push(-size, -size, 0); // 3

        geometry.positions.push(0, 0, 0); // 4
        geometry.positions.push(0, 0, 0); // 5

        geometry.indices.push(0, 1, 1, 2, 2, 3, 3, 0, 4, 5);

        const material = new Basic({ color: 0xffffff });
        super(geometry, material);
        this.reference = props.light;
        this.material.glMode = GL_LINES;
        this.lookToTarget = true;
    }

    update() {
        super.update();

        vec3.copy(this.position.data, this.reference.position.data);
        vec3.copy(this.rotation.data, this.reference.rotation.data);
        vec3.copy(this.scale.data, this.reference.scale.data);

        const origin = vec3.subtract(this.position.data, this.position.data, this.reference.target);
        this.geometry.positions[this.geometry.positions.length - 1] = -vec3.length(origin);

        this.positionsNeedUpdate = true;
    }
}

export default DirectionalHelper;