1 | /**
|
---|
2 | * Camera for rendering cube maps
|
---|
3 | * - renders scene into axis-aligned cube
|
---|
4 | *
|
---|
5 | * @author alteredq / http://alteredqualia.com/
|
---|
6 | */
|
---|
7 |
|
---|
8 | THREE.CubeCamera = function ( near, far, cubeResolution ) {
|
---|
9 |
|
---|
10 | THREE.Object3D.call( this );
|
---|
11 |
|
---|
12 | var fov = 90, aspect = 1;
|
---|
13 |
|
---|
14 | var cameraPX = new THREE.PerspectiveCamera( fov, aspect, near, far );
|
---|
15 | cameraPX.up.set( 0, -1, 0 );
|
---|
16 | cameraPX.lookAt( new THREE.Vector3( 1, 0, 0 ) );
|
---|
17 | this.add( cameraPX );
|
---|
18 |
|
---|
19 | var cameraNX = new THREE.PerspectiveCamera( fov, aspect, near, far );
|
---|
20 | cameraNX.up.set( 0, -1, 0 );
|
---|
21 | cameraNX.lookAt( new THREE.Vector3( -1, 0, 0 ) );
|
---|
22 | this.add( cameraNX );
|
---|
23 |
|
---|
24 | var cameraPY = new THREE.PerspectiveCamera( fov, aspect, near, far );
|
---|
25 | cameraPY.up.set( 0, 0, 1 );
|
---|
26 | cameraPY.lookAt( new THREE.Vector3( 0, 1, 0 ) );
|
---|
27 | this.add( cameraPY );
|
---|
28 |
|
---|
29 | var cameraNY = new THREE.PerspectiveCamera( fov, aspect, near, far );
|
---|
30 | cameraNY.up.set( 0, 0, -1 );
|
---|
31 | cameraNY.lookAt( new THREE.Vector3( 0, -1, 0 ) );
|
---|
32 | this.add( cameraNY );
|
---|
33 |
|
---|
34 | var cameraPZ = new THREE.PerspectiveCamera( fov, aspect, near, far );
|
---|
35 | cameraPZ.up.set( 0, -1, 0 );
|
---|
36 | cameraPZ.lookAt( new THREE.Vector3( 0, 0, 1 ) );
|
---|
37 | this.add( cameraPZ );
|
---|
38 |
|
---|
39 | var cameraNZ = new THREE.PerspectiveCamera( fov, aspect, near, far );
|
---|
40 | cameraNZ.up.set( 0, -1, 0 );
|
---|
41 | cameraNZ.lookAt( new THREE.Vector3( 0, 0, -1 ) );
|
---|
42 | this.add( cameraNZ );
|
---|
43 |
|
---|
44 | this.renderTarget = new THREE.WebGLRenderTargetCube( cubeResolution, cubeResolution, { format: THREE.RGBFormat, magFilter: THREE.LinearFilter, minFilter: THREE.LinearFilter } );
|
---|
45 |
|
---|
46 | this.updateCubeMap = function ( renderer, scene ) {
|
---|
47 |
|
---|
48 | var renderTarget = this.renderTarget;
|
---|
49 | var generateMipmaps = renderTarget.generateMipmaps;
|
---|
50 |
|
---|
51 | renderTarget.generateMipmaps = false;
|
---|
52 |
|
---|
53 | renderTarget.activeCubeFace = 0;
|
---|
54 | renderer.render( scene, cameraPX, renderTarget );
|
---|
55 |
|
---|
56 | renderTarget.activeCubeFace = 1;
|
---|
57 | renderer.render( scene, cameraNX, renderTarget );
|
---|
58 |
|
---|
59 | renderTarget.activeCubeFace = 2;
|
---|
60 | renderer.render( scene, cameraPY, renderTarget );
|
---|
61 |
|
---|
62 | renderTarget.activeCubeFace = 3;
|
---|
63 | renderer.render( scene, cameraNY, renderTarget );
|
---|
64 |
|
---|
65 | renderTarget.activeCubeFace = 4;
|
---|
66 | renderer.render( scene, cameraPZ, renderTarget );
|
---|
67 |
|
---|
68 | renderTarget.generateMipmaps = generateMipmaps;
|
---|
69 |
|
---|
70 | renderTarget.activeCubeFace = 5;
|
---|
71 | renderer.render( scene, cameraNZ, renderTarget );
|
---|
72 |
|
---|
73 | };
|
---|
74 |
|
---|
75 | };
|
---|
76 |
|
---|
77 | THREE.CubeCamera.prototype = Object.create( THREE.Object3D.prototype );
|
---|