2
0

ParallaxBarrierEffect.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /**
  2. * @author mrdoob / http://mrdoob.com/
  3. * @author marklundin / http://mark-lundin.com/
  4. * @author alteredq / http://alteredqualia.com/
  5. */
  6. THREE.ParallaxBarrierEffect = function ( renderer ) {
  7. var _camera = new THREE.OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );
  8. var _scene = new THREE.Scene();
  9. var _params = { minFilter: THREE.LinearFilter, magFilter: THREE.NearestFilter, format: THREE.RGBAFormat };
  10. var _renderTargetL = new THREE.WebGLRenderTarget( 512, 512, _params );
  11. var _renderTargetR = new THREE.WebGLRenderTarget( 512, 512, _params );
  12. var _material = new THREE.ShaderMaterial( {
  13. uniforms: {
  14. "mapLeft": { type: "t", value: _renderTargetL },
  15. "mapRight": { type: "t", value: _renderTargetR }
  16. },
  17. vertexShader: [
  18. "varying vec2 vUv;",
  19. "void main() {",
  20. " vUv = vec2( uv.x, uv.y );",
  21. " gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
  22. "}"
  23. ].join( "\n" ),
  24. fragmentShader: [
  25. "uniform sampler2D mapLeft;",
  26. "uniform sampler2D mapRight;",
  27. "varying vec2 vUv;",
  28. "void main() {",
  29. " vec2 uv = vUv;",
  30. " if ( ( mod( gl_FragCoord.y, 2.0 ) ) > 1.00 ) {",
  31. " gl_FragColor = texture2D( mapLeft, uv );",
  32. " } else {",
  33. " gl_FragColor = texture2D( mapRight, uv );",
  34. " }",
  35. "}"
  36. ].join( "\n" )
  37. } );
  38. var mesh = new THREE.Mesh( new THREE.PlaneBufferGeometry( 2, 2 ), _material );
  39. _scene.add( mesh );
  40. this.setSize = function ( width, height ) {
  41. _renderTargetL.setSize( width, height );
  42. _renderTargetR.setSize( width, height );
  43. renderer.setSize( width, height );
  44. };
  45. this.render = function ( scene, camera ) {
  46. if ( camera instanceof THREE.StereoCamera === false ) {
  47. console.error( 'THREE.StereoCamera.render(): camera should now be an insteance of THREE.StereoCamera.' );
  48. return;
  49. }
  50. scene.updateMatrixWorld();
  51. if ( camera.parent === null ) camera.updateMatrixWorld();
  52. renderer.render( scene, camera.cameraL, _renderTargetL, true );
  53. renderer.render( scene, camera.cameraR, _renderTargetR, true );
  54. renderer.render( _scene, _camera );
  55. };
  56. };