1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- import { NodeMaterial } from 'three/webgpu';
- import { nodeObject, Fn, vec4, uv, If, mod, screenCoordinate } from 'three/tsl';
- import StereoCompositePassNode from './StereoCompositePassNode.js';
- class ParallaxBarrierPassNode extends StereoCompositePassNode {
- static get type() {
- return 'ParallaxBarrierPassNode';
- }
-
- constructor( scene, camera ) {
- super( scene, camera );
-
- this.isParallaxBarrierPassNode = true;
- }
-
- setup( builder ) {
- const uvNode = uv();
- const parallaxBarrier = Fn( () => {
- const color = vec4().toVar();
- If( mod( screenCoordinate.y, 2 ).greaterThan( 1 ), () => {
- color.assign( this._mapLeft.sample( uvNode ) );
- } ).Else( () => {
- color.assign( this._mapRight.sample( uvNode ) );
- } );
- return color;
- } );
- const material = this._material || ( this._material = new NodeMaterial() );
- material.fragmentNode = parallaxBarrier().context( builder.getSharedContext() );
- material.needsUpdate = true;
- return super.setup( builder );
- }
- }
- export default ParallaxBarrierPassNode;
- export const parallaxBarrierPass = ( scene, camera ) => nodeObject( new ParallaxBarrierPassNode( scene, camera ) );
|