function CameraHelper( camera ) {

        var geometry = new BufferGeometry();
        var material = new LineBasicMaterial( { color: 0xffffff, vertexColors: FaceColors } );

        var vertices = [];
        var colors = [];

        var pointMap = {};

        // colors

        var colorFrustum = new Color( 0xffaa00 );
        var colorCone = new Color( 0xff0000 );
        var colorUp = new Color( 0x00aaff );
        var colorTarget = new Color( 0xffffff );
        var colorCross = new Color( 0x333333 );

        // near

        addLine( 'n1', 'n2', colorFrustum );
        addLine( 'n2', 'n4', colorFrustum );
        addLine( 'n4', 'n3', colorFrustum );
        addLine( 'n3', 'n1', colorFrustum );

        // far

        addLine( 'f1', 'f2', colorFrustum );
        addLine( 'f2', 'f4', colorFrustum );
        addLine( 'f4', 'f3', colorFrustum );
        addLine( 'f3', 'f1', colorFrustum );

        // sides

        addLine( 'n1', 'f1', colorFrustum );
        addLine( 'n2', 'f2', colorFrustum );
        addLine( 'n3', 'f3', colorFrustum );
        addLine( 'n4', 'f4', colorFrustum );

        // cone

        addLine( 'p', 'n1', colorCone );
        addLine( 'p', 'n2', colorCone );
        addLine( 'p', 'n3', colorCone );
        addLine( 'p', 'n4', colorCone );

        // up

        addLine( 'u1', 'u2', colorUp );
        addLine( 'u2', 'u3', colorUp );
        addLine( 'u3', 'u1', colorUp );

        // target

        addLine( 'c', 't', colorTarget );
        addLine( 'p', 'c', colorCross );

        // cross

        addLine( 'cn1', 'cn2', colorCross );
        addLine( 'cn3', 'cn4', colorCross );

        addLine( 'cf1', 'cf2', colorCross );
        addLine( 'cf3', 'cf4', colorCross );

        function addLine( a, b, color ) {

            addPoint( a, color );
            addPoint( b, color );

        }

        function addPoint( id, color ) {

            vertices.push( 0, 0, 0 );
            colors.push( color.r, color.g, color.b );

            if ( pointMap[ id ] === undefined ) {

                pointMap[ id ] = [];

            }

            pointMap[ id ].push( ( vertices.length / 3 ) - 1 );

        }

        geometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );
        geometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );

        LineSegments.call( this, geometry, material );

        this.camera = camera;
        if ( this.camera.updateProjectionMatrix ) this.camera.updateProjectionMatrix();

        this.matrix = camera.matrixWorld;
        this.matrixAutoUpdate = false;

        this.pointMap = pointMap;

        this.update();

    }
@author alteredq / http://alteredqualia.com/
@author Mugen87 / https://github.com/Mugen87

   - shows frustum, line of sight and up of the camera
   - suitable for fast updates
    - based on frustum visualization in lightgl.js shadowmap example
       http://evanw.github.com/lightgl.js/tests/shadowmap.html