Skip to content

Instantly share code, notes, and snippets.

@wiledal
Created February 22, 2019 09:25
Show Gist options
  • Save wiledal/95a337402d7b92ede2a9e2138b91b268 to your computer and use it in GitHub Desktop.
Save wiledal/95a337402d7b92ede2a9e2138b91b268 to your computer and use it in GitHub Desktop.
Basic method to apply a stencil mask from objects in a scene to mask another scene
/*
Usage
init () {
const renderer = new THREE.WebGLRenderer()
const camera = new THREE.PerspectiveCamera()
renderer.autoClear = false // turn off clearing of renderer on each render-call
const scene1 = new THREE.Scene() // scene with stencil objects
const scene2 = new THREE.Scene() // scene with masked objects
const scene3 = new THREE.Scene() // surrounding scene
}
update () {
requestAnimationFrame(update)
renderer.clear() // clear the renderer
renderSceneStencilMask(scene1, scene2, camera, renderer) // render the mask
renderer.render(scene3, camera) // render the surrounding main scene
}
*/
function renderSceneStencilMask (stencilScene, renderedScene, camera, renderer) {
const gl = renderer.context
gl.enable(gl.STENCIL_TEST)
gl.stencilFunc(gl.ALWAYS, 1, 0xff)
gl.stencilOp(gl.KEEP, gl.KEEP, gl.REPLACE)
gl.depthMask(false)
gl.colorMask(false, false, false, false);
renderer.render( stencilScene, camera );
gl.stencilFunc(gl.EQUAL, 1, 0xff)
gl.depthMask(true)
gl.colorMask(true, true, true, true);
renderer.render( renderedScene, camera );
gl.disable(gl.STENCIL_TEST)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment