Dies ist das Repository meines kleinen Portfolios.
Im Hintergrund läuft eine Planetensimulation, geschrieben in JavaScript und Three.js.
Die zu sehenden Texturen stammen von:
https://www.solarsystemscope.com/textures/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
2.1 KiB
92 lines
2.1 KiB
( function () { |
|
|
|
class MaskPass extends THREE.Pass { |
|
|
|
constructor( scene, camera ) { |
|
|
|
super(); |
|
this.scene = scene; |
|
this.camera = camera; |
|
this.clear = true; |
|
this.needsSwap = false; |
|
this.inverse = false; |
|
|
|
} |
|
|
|
render( renderer, writeBuffer, readBuffer |
|
/*, deltaTime, maskActive */ |
|
) { |
|
|
|
const context = renderer.getContext(); |
|
const state = renderer.state; // don't update color or depth |
|
|
|
state.buffers.color.setMask( false ); |
|
state.buffers.depth.setMask( false ); // lock buffers |
|
|
|
state.buffers.color.setLocked( true ); |
|
state.buffers.depth.setLocked( true ); // set up stencil |
|
|
|
let writeValue, clearValue; |
|
|
|
if ( this.inverse ) { |
|
|
|
writeValue = 0; |
|
clearValue = 1; |
|
|
|
} else { |
|
|
|
writeValue = 1; |
|
clearValue = 0; |
|
|
|
} |
|
|
|
state.buffers.stencil.setTest( true ); |
|
state.buffers.stencil.setOp( context.REPLACE, context.REPLACE, context.REPLACE ); |
|
state.buffers.stencil.setFunc( context.ALWAYS, writeValue, 0xffffffff ); |
|
state.buffers.stencil.setClear( clearValue ); |
|
state.buffers.stencil.setLocked( true ); // draw into the stencil buffer |
|
|
|
renderer.setRenderTarget( readBuffer ); |
|
if ( this.clear ) renderer.clear(); |
|
renderer.render( this.scene, this.camera ); |
|
renderer.setRenderTarget( writeBuffer ); |
|
if ( this.clear ) renderer.clear(); |
|
renderer.render( this.scene, this.camera ); // unlock color and depth buffer for subsequent rendering |
|
|
|
state.buffers.color.setLocked( false ); |
|
state.buffers.depth.setLocked( false ); // only render where stencil is set to 1 |
|
|
|
state.buffers.stencil.setLocked( false ); |
|
state.buffers.stencil.setFunc( context.EQUAL, 1, 0xffffffff ); // draw if == 1 |
|
|
|
state.buffers.stencil.setOp( context.KEEP, context.KEEP, context.KEEP ); |
|
state.buffers.stencil.setLocked( true ); |
|
|
|
} |
|
|
|
} |
|
|
|
class ClearMaskPass extends THREE.Pass { |
|
|
|
constructor() { |
|
|
|
super(); |
|
this.needsSwap = false; |
|
|
|
} |
|
|
|
render( renderer |
|
/*, writeBuffer, readBuffer, deltaTime, maskActive */ |
|
) { |
|
|
|
renderer.state.buffers.stencil.setLocked( false ); |
|
renderer.state.buffers.stencil.setTest( false ); |
|
|
|
} |
|
|
|
} |
|
|
|
THREE.ClearMaskPass = ClearMaskPass; |
|
THREE.MaskPass = MaskPass; |
|
|
|
} )();
|
|
|