ParallaxBarrierEffect.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. ( function () {
  2. var ParallaxBarrierEffect = function ( renderer ) {
  3. var _camera = new THREE.OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );
  4. var _scene = new THREE.Scene();
  5. var _stereo = new THREE.StereoCamera();
  6. var _params = {
  7. minFilter: THREE.LinearFilter,
  8. magFilter: THREE.NearestFilter,
  9. format: THREE.RGBAFormat
  10. };
  11. var _renderTargetL = new THREE.WebGLRenderTarget( 512, 512, _params );
  12. var _renderTargetR = new THREE.WebGLRenderTarget( 512, 512, _params );
  13. var _material = new THREE.ShaderMaterial( {
  14. uniforms: {
  15. 'mapLeft': {
  16. value: _renderTargetL.texture
  17. },
  18. 'mapRight': {
  19. value: _renderTargetR.texture
  20. }
  21. },
  22. vertexShader: [ 'varying vec2 vUv;', 'void main() {', ' vUv = vec2( uv.x, uv.y );', ' gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );', '}' ].join( '\n' ),
  23. fragmentShader: [ 'uniform sampler2D mapLeft;', 'uniform sampler2D mapRight;', 'varying vec2 vUv;', 'void main() {', ' vec2 uv = vUv;', ' if ( ( mod( gl_FragCoord.y, 2.0 ) ) > 1.00 ) {', ' gl_FragColor = texture2D( mapLeft, uv );', ' } else {', ' gl_FragColor = texture2D( mapRight, uv );', ' }', '}' ].join( '\n' )
  24. } );
  25. var mesh = new THREE.Mesh( new THREE.PlaneGeometry( 2, 2 ), _material );
  26. _scene.add( mesh );
  27. this.setSize = function ( width, height ) {
  28. renderer.setSize( width, height );
  29. var pixelRatio = renderer.getPixelRatio();
  30. _renderTargetL.setSize( width * pixelRatio, height * pixelRatio );
  31. _renderTargetR.setSize( width * pixelRatio, height * pixelRatio );
  32. };
  33. this.render = function ( scene, camera ) {
  34. scene.updateMatrixWorld();
  35. if ( camera.parent === null ) camera.updateMatrixWorld();
  36. _stereo.update( camera );
  37. renderer.setRenderTarget( _renderTargetL );
  38. renderer.clear();
  39. renderer.render( scene, _stereo.cameraL );
  40. renderer.setRenderTarget( _renderTargetR );
  41. renderer.clear();
  42. renderer.render( scene, _stereo.cameraR );
  43. renderer.setRenderTarget( null );
  44. renderer.render( _scene, _camera );
  45. };
  46. };
  47. THREE.ParallaxBarrierEffect = ParallaxBarrierEffect;
  48. } )();