|
@@ -1,104 +0,0 @@
|
|
|
-/**
|
|
|
- * @author mrdoob / http://mrdoob.com/
|
|
|
- */
|
|
|
-
|
|
|
-THREE.CardboardEffect = function ( renderer ) {
|
|
|
-
|
|
|
- var _camera = new THREE.OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );
|
|
|
-
|
|
|
- var _scene = new THREE.Scene();
|
|
|
-
|
|
|
- var _stereo = new THREE.StereoCamera();
|
|
|
- _stereo.aspect = 0.5;
|
|
|
-
|
|
|
- var _params = { minFilter: THREE.LinearFilter, magFilter: THREE.NearestFilter, format: THREE.RGBAFormat };
|
|
|
-
|
|
|
- var _renderTarget = new THREE.WebGLRenderTarget( 512, 512, _params );
|
|
|
- _renderTarget.scissorTest = true;
|
|
|
-
|
|
|
- // Distortion Mesh ported from:
|
|
|
- // https://github.com/borismus/webvr-boilerplate/blob/master/src/distortion/barrel-distortion-fragment.js
|
|
|
-
|
|
|
- var distortion = new THREE.Vector2( 0.441, 0.156 );
|
|
|
-
|
|
|
- var geometry = new THREE.PlaneBufferGeometry( 1, 1, 10, 20 ).removeAttribute( 'normal' ).toNonIndexed();
|
|
|
-
|
|
|
- var positions = geometry.attributes.position.array;
|
|
|
- var uvs = geometry.attributes.uv.array;
|
|
|
-
|
|
|
- // duplicate
|
|
|
-
|
|
|
- var positions2 = new Float32Array( positions.length * 2 );
|
|
|
- positions2.set( positions );
|
|
|
- positions2.set( positions, positions.length );
|
|
|
-
|
|
|
- var uvs2 = new Float32Array( uvs.length * 2 );
|
|
|
- uvs2.set( uvs );
|
|
|
- uvs2.set( uvs, uvs.length );
|
|
|
-
|
|
|
- var vector = new THREE.Vector2();
|
|
|
- var length = positions.length / 3;
|
|
|
-
|
|
|
- for ( var i = 0, l = positions2.length / 3; i < l; i ++ ) {
|
|
|
-
|
|
|
- vector.x = positions2[ i * 3 + 0 ];
|
|
|
- vector.y = positions2[ i * 3 + 1 ];
|
|
|
-
|
|
|
- var dot = vector.dot( vector );
|
|
|
- var scalar = 1.5 + ( distortion.x + distortion.y * dot ) * dot;
|
|
|
-
|
|
|
- var offset = i < length ? 0 : 1;
|
|
|
-
|
|
|
- positions2[ i * 3 + 0 ] = ( vector.x / scalar ) * 1.5 - 0.5 + offset;
|
|
|
- positions2[ i * 3 + 1 ] = ( vector.y / scalar ) * 3.0;
|
|
|
-
|
|
|
- uvs2[ i * 2 ] = ( uvs2[ i * 2 ] + offset ) * 0.5;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- geometry.attributes.position.array = positions2;
|
|
|
- geometry.attributes.uv.array = uvs2;
|
|
|
-
|
|
|
- //
|
|
|
-
|
|
|
- // var material = new THREE.MeshBasicMaterial( { wireframe: true } );
|
|
|
- var material = new THREE.MeshBasicMaterial( { map: _renderTarget } );
|
|
|
- var mesh = new THREE.Mesh( geometry, material );
|
|
|
- _scene.add( mesh );
|
|
|
-
|
|
|
- //
|
|
|
-
|
|
|
- this.setSize = function ( width, height ) {
|
|
|
-
|
|
|
- renderer.setSize( width, height );
|
|
|
-
|
|
|
- var pixelRatio = renderer.getPixelRatio();
|
|
|
-
|
|
|
- _renderTarget.setSize( width * pixelRatio, height * pixelRatio );
|
|
|
-
|
|
|
- };
|
|
|
-
|
|
|
- this.render = function ( scene, camera ) {
|
|
|
-
|
|
|
- scene.updateMatrixWorld();
|
|
|
-
|
|
|
- if ( camera.parent === null ) camera.updateMatrixWorld();
|
|
|
-
|
|
|
- _stereo.update( camera );
|
|
|
-
|
|
|
- var width = _renderTarget.width / 2;
|
|
|
- var height = _renderTarget.height;
|
|
|
-
|
|
|
- _renderTarget.scissor.set( 0, 0, width, height );
|
|
|
- _renderTarget.viewport.set( 0, 0, width, height );
|
|
|
- renderer.render( scene, _stereo.cameraL, _renderTarget );
|
|
|
-
|
|
|
- _renderTarget.scissor.set( width, 0, width, height );
|
|
|
- _renderTarget.viewport.set( width, 0, width, height );
|
|
|
- renderer.render( scene, _stereo.cameraR, _renderTarget );
|
|
|
-
|
|
|
- renderer.render( _scene, _camera );
|
|
|
-
|
|
|
- };
|
|
|
-
|
|
|
-};
|