Skip to content

Commit 908c954

Browse files
committed
Add mask preview
1 parent d380e15 commit 908c954

File tree

1 file changed

+34
-8
lines changed

1 file changed

+34
-8
lines changed

examples/distortionPreview.js

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { TilesRenderer } from '3d-tiles-renderer';
77

88
let camera, frustumCamera, scene, renderer, controls, clock, cameraHelper, frameEl;
99
let light, ambient, cameraModels, tilesGroup, tiles, skyTiles, renderTarget, pass;
10-
let frustumGroup, tiltGroup, frustumMesh, frustumLines, stencilGroup;
10+
let frustumGroup, tiltGroup, frustumMesh, frustumLines, stencilGroup, maskMesh;
1111
let time = 0;
1212
const PIP_RENDER_SCALE = 0.5;
1313
const TERRAIN_RENDER_ORDER = - 10;
@@ -82,15 +82,21 @@ async function init() {
8282

8383
// distorted frustum
8484
frustumMesh = new FrustumMesh( new THREE.MeshPhongMaterial( {
85-
8685
transparent: true,
8786
opacity: 0.1,
8887
side: THREE.DoubleSide,
8988
depthWrite: false,
90-
9189
} ) );
9290
tiltGroup.add( frustumMesh );
9391

92+
maskMesh = new FrustumMesh( new THREE.MeshBasicMaterial( {
93+
color: 0xffffff,
94+
side: THREE.DoubleSide,
95+
depthWrite: false,
96+
} ) );
97+
maskMesh.visible = false;
98+
tiltGroup.add( maskMesh );
99+
94100
// distorted lines
95101
frustumLines = new THREE.LineSegments(
96102
new THREE.EdgesGeometry(),
@@ -217,6 +223,7 @@ async function init() {
217223
renderTarget = new THREE.WebGLRenderTarget( 1, 1, {
218224
generateMipmaps: true,
219225
minFilter: THREE.LinearMipMapLinearFilter,
226+
samples: 4,
220227
} );
221228
pass = new FullScreenQuad(
222229
new CahvoreDistortionMaterial( {
@@ -275,7 +282,7 @@ function buildGUI() {
275282

276283
const frustumSettings = gui.addFolder( 'frustum' );
277284
frustumSettings.add( params, 'camera', Object.keys( cameraModels ) ).onChange( updateFrustums );
278-
frustumSettings.add( params, 'rendering', [ 'distorted', 'minimum', 'maximum', 'checkerboard' ] ).onChange( updateFrustums );
285+
frustumSettings.add( params, 'rendering', [ 'distorted', 'minimum', 'maximum', 'checkerboard', 'mask' ] ).onChange( updateFrustums );
279286
frustumSettings.add( params, 'showTint' );
280287
frustumSettings.add( params, 'showVolume' );
281288
frustumSettings.add( params, 'near', 0.01, 250 ).onChange( updateFrustums );
@@ -348,6 +355,12 @@ function updateFrustums() {
348355

349356
}
350357

358+
// update the mask mesh to define a planar mesh representing the projection
359+
camera.near = 1;
360+
camera.far = 1;
361+
camera.planarProjectionFactor = 1;
362+
maskMesh.setFromCahvoreParameters( camera );
363+
351364
// update the frustum lines
352365
frustumLines.geometry.dispose();
353366
frustumLines.geometry = new THREE.EdgesGeometry( frustumMesh.geometry, 10 );
@@ -370,7 +383,7 @@ function updateFrustums() {
370383

371384
// update the distortion material
372385
pass.material.checkerboard = params.rendering === 'checkerboard';
373-
pass.material.passthrough = params.rendering === 'minimum' || params.rendering === 'maximum';
386+
pass.material.passthrough = params.rendering === 'minimum' || params.rendering === 'maximum' || params.rendering === 'mask';
374387
pass.material.setFromCameraModel( camera.model );
375388

376389
updateRenderTarget();
@@ -413,10 +426,23 @@ function animation() {
413426
skyTiles.setResolution( frustumCamera, renderTarget.texture.image.width, renderTarget.texture.image.height );
414427
skyTiles.update();
415428

416-
// render the scene to the target
417-
renderer.setClearColor( LINEAR_CLEAR_COLOR );
429+
// render the scene for the picture in picture view
430+
renderer.setClearColor( 0 );
418431
renderer.setRenderTarget( renderTarget );
419-
renderer.render( tilesGroup, frustumCamera );
432+
if ( params.rendering === 'mask' ) {
433+
434+
// only render the mask mesh
435+
maskMesh.visible = true;
436+
renderer.render( maskMesh, frustumCamera );
437+
maskMesh.visible = false;
438+
439+
} else {
440+
441+
// render the scene to the target
442+
renderer.render( tilesGroup, frustumCamera );
443+
444+
}
445+
420446
renderer.setRenderTarget( null );
421447
renderer.setClearColor( SRGB_CLEAR_COLOR );
422448

0 commit comments

Comments
 (0)