BLOBBO/node_modules/three/examples/jsm/tsl/display/ParallaxBarrierPassNode.js
type-two 969f602dd4 Foundation: vite+ts+three+rapier scaffold, frozen contracts, lane docs A-E
Fixed-step world runtime, event bus wire protocol between lanes, integration
seam (game.ts) with placeholder ball. Lanes A/B/C own disjoint dirs.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 19:55:43 +10:00

55 lines
1.1 KiB
JavaScript

import { nodeObject, Fn, vec4, uv, NodeMaterial, 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.uv( uvNode ) );
} ).Else( () => {
color.assign( this._mapRight.uv( 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 ) );