ParallaxBarrierEffect.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. console.warn( "THREE.ParallaxBarrierEffect: As part of the transition to ES6 Modules, the files in 'examples/js' have been deprecated in r117 (May 2020) and will be deleted in r124 (December 2020). You can find more information about developing using ES6 Modules in https://threejs.org/docs/index.html#manual/en/introduction/Import-via-modules." );
  2. /**
  3. * @author mrdoob / http://mrdoob.com/
  4. * @author marklundin / http://mark-lundin.com/
  5. * @author alteredq / http://alteredqualia.com/
  6. */
  7. THREE.ParallaxBarrierEffect = function ( renderer ) {
  8. var _camera = new THREE.OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );
  9. var _scene = new THREE.Scene();
  10. var _stereo = new THREE.StereoCamera();
  11. var _params = { minFilter: THREE.LinearFilter, magFilter: THREE.NearestFilter, format: THREE.RGBAFormat };
  12. var _renderTargetL = new THREE.WebGLRenderTarget( 512, 512, _params );
  13. var _renderTargetR = new THREE.WebGLRenderTarget( 512, 512, _params );
  14. var _material = new THREE.ShaderMaterial( {
  15. uniforms: {
  16. "mapLeft": { value: _renderTargetL.texture },
  17. "mapRight": { value: _renderTargetR.texture }
  18. },
  19. vertexShader: [
  20. "varying vec2 vUv;",
  21. "void main() {",
  22. " vUv = vec2( uv.x, uv.y );",
  23. " gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
  24. "}"
  25. ].join( "\n" ),
  26. fragmentShader: [
  27. "uniform sampler2D mapLeft;",
  28. "uniform sampler2D mapRight;",
  29. "varying vec2 vUv;",
  30. "void main() {",
  31. " vec2 uv = vUv;",
  32. " if ( ( mod( gl_FragCoord.y, 2.0 ) ) > 1.00 ) {",
  33. " gl_FragColor = texture2D( mapLeft, uv );",
  34. " } else {",
  35. " gl_FragColor = texture2D( mapRight, uv );",
  36. " }",
  37. "}"
  38. ].join( "\n" )
  39. } );
  40. var mesh = new THREE.Mesh( new THREE.PlaneBufferGeometry( 2, 2 ), _material );
  41. _scene.add( mesh );
  42. this.setSize = function ( width, height ) {
  43. renderer.setSize( width, height );
  44. var pixelRatio = renderer.getPixelRatio();
  45. _renderTargetL.setSize( width * pixelRatio, height * pixelRatio );
  46. _renderTargetR.setSize( width * pixelRatio, height * pixelRatio );
  47. };
  48. this.render = function ( scene, camera ) {
  49. scene.updateMatrixWorld();
  50. if ( camera.parent === null ) camera.updateMatrixWorld();
  51. _stereo.update( camera );
  52. renderer.setRenderTarget( _renderTargetL );
  53. renderer.clear();
  54. renderer.render( scene, _stereo.cameraL );
  55. renderer.setRenderTarget( _renderTargetR );
  56. renderer.clear();
  57. renderer.render( scene, _stereo.cameraR );
  58. renderer.setRenderTarget( null );
  59. renderer.render( _scene, _camera );
  60. };
  61. };