ParallaxBarrierEffect.js 2.3 KB

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