|
@@ -44,6 +44,7 @@ let offsetParent;
|
|
|
let controller, controllerGrip;
|
|
|
let xrSession = null;
|
|
|
let tasks = [];
|
|
|
+const upVector = new Vector3( 0, 1, 0 );
|
|
|
|
|
|
let params = {
|
|
|
|
|
@@ -63,7 +64,7 @@ function init() {
|
|
|
renderer = new WebGLRenderer( { antialias: true } );
|
|
|
renderer.setPixelRatio( window.devicePixelRatio );
|
|
|
renderer.setSize( window.innerWidth, window.innerHeight );
|
|
|
- renderer.setClearColor( 0x151c1f );
|
|
|
+ renderer.setClearColor( 0xbbbbbb );
|
|
|
renderer.outputEncoding = sRGBEncoding;
|
|
|
renderer.xr.enabled = true;
|
|
|
|
|
@@ -123,6 +124,8 @@ function init() {
|
|
|
tiles.downloadQueue.schedulingCallback = tilesSchedulingCB;
|
|
|
tiles.parseQueue.schedulingCallback = tilesSchedulingCB;
|
|
|
|
|
|
+ tiles.lruCache.maxSize = 1200;
|
|
|
+ tiles.lruCache.minSize = 900;
|
|
|
|
|
|
// Raycasting init
|
|
|
raycaster = new Raycaster();
|
|
@@ -139,7 +142,11 @@ function init() {
|
|
|
controller = renderer.xr.getController( 0 );
|
|
|
controller.addEventListener( 'selectstart', () => {
|
|
|
|
|
|
- workspace.position.copy( intersectRing.position );
|
|
|
+ if ( intersectRing.visible ) {
|
|
|
+
|
|
|
+ workspace.position.copy( intersectRing.position );
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
} );
|
|
|
controller.addEventListener( 'connected', function ( event ) {
|
|
@@ -342,6 +349,13 @@ function animate() {
|
|
|
const scale = workspace.position.distanceTo( intersectRing.position ) * camera.fov / 4000;
|
|
|
intersectRing.scale.setScalar( scale );
|
|
|
|
|
|
+ // only teleport to mostly horizontal surfaces
|
|
|
+ if ( hit.face.normal.dot( upVector ) < 0.15 ) {
|
|
|
+
|
|
|
+ intersectRing.visible = false;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
} else {
|
|
|
|
|
|
intersectRing.visible = false;
|