|
@@ -7835,32 +7835,32 @@ class CubeCamera extends Object3D {
|
|
const cameraPX = new PerspectiveCamera(fov, aspect, near, far);
|
|
const cameraPX = new PerspectiveCamera(fov, aspect, near, far);
|
|
cameraPX.layers = this.layers;
|
|
cameraPX.layers = this.layers;
|
|
cameraPX.up.set(0, -1, 0);
|
|
cameraPX.up.set(0, -1, 0);
|
|
- cameraPX.lookAt(new Vector3(1, 0, 0));
|
|
|
|
|
|
+ cameraPX.lookAt(1, 0, 0);
|
|
this.add(cameraPX);
|
|
this.add(cameraPX);
|
|
const cameraNX = new PerspectiveCamera(fov, aspect, near, far);
|
|
const cameraNX = new PerspectiveCamera(fov, aspect, near, far);
|
|
cameraNX.layers = this.layers;
|
|
cameraNX.layers = this.layers;
|
|
cameraNX.up.set(0, -1, 0);
|
|
cameraNX.up.set(0, -1, 0);
|
|
- cameraNX.lookAt(new Vector3(-1, 0, 0));
|
|
|
|
|
|
+ cameraNX.lookAt(-1, 0, 0);
|
|
this.add(cameraNX);
|
|
this.add(cameraNX);
|
|
const cameraPY = new PerspectiveCamera(fov, aspect, near, far);
|
|
const cameraPY = new PerspectiveCamera(fov, aspect, near, far);
|
|
cameraPY.layers = this.layers;
|
|
cameraPY.layers = this.layers;
|
|
cameraPY.up.set(0, 0, 1);
|
|
cameraPY.up.set(0, 0, 1);
|
|
- cameraPY.lookAt(new Vector3(0, 1, 0));
|
|
|
|
|
|
+ cameraPY.lookAt(0, 1, 0);
|
|
this.add(cameraPY);
|
|
this.add(cameraPY);
|
|
const cameraNY = new PerspectiveCamera(fov, aspect, near, far);
|
|
const cameraNY = new PerspectiveCamera(fov, aspect, near, far);
|
|
cameraNY.layers = this.layers;
|
|
cameraNY.layers = this.layers;
|
|
cameraNY.up.set(0, 0, -1);
|
|
cameraNY.up.set(0, 0, -1);
|
|
- cameraNY.lookAt(new Vector3(0, -1, 0));
|
|
|
|
|
|
+ cameraNY.lookAt(0, -1, 0);
|
|
this.add(cameraNY);
|
|
this.add(cameraNY);
|
|
const cameraPZ = new PerspectiveCamera(fov, aspect, near, far);
|
|
const cameraPZ = new PerspectiveCamera(fov, aspect, near, far);
|
|
cameraPZ.layers = this.layers;
|
|
cameraPZ.layers = this.layers;
|
|
cameraPZ.up.set(0, -1, 0);
|
|
cameraPZ.up.set(0, -1, 0);
|
|
- cameraPZ.lookAt(new Vector3(0, 0, 1));
|
|
|
|
|
|
+ cameraPZ.lookAt(0, 0, 1);
|
|
this.add(cameraPZ);
|
|
this.add(cameraPZ);
|
|
const cameraNZ = new PerspectiveCamera(fov, aspect, near, far);
|
|
const cameraNZ = new PerspectiveCamera(fov, aspect, near, far);
|
|
cameraNZ.layers = this.layers;
|
|
cameraNZ.layers = this.layers;
|
|
cameraNZ.up.set(0, -1, 0);
|
|
cameraNZ.up.set(0, -1, 0);
|
|
- cameraNZ.lookAt(new Vector3(0, 0, -1));
|
|
|
|
|
|
+ cameraNZ.lookAt(0, 0, -1);
|
|
this.add(cameraNZ);
|
|
this.add(cameraNZ);
|
|
}
|
|
}
|
|
update(renderer, scene) {
|
|
update(renderer, scene) {
|
|
@@ -16248,6 +16248,7 @@ class WebXRManager extends EventDispatcher {
|
|
const scope = this;
|
|
const scope = this;
|
|
let session = null;
|
|
let session = null;
|
|
let framebufferScaleFactor = 1.0;
|
|
let framebufferScaleFactor = 1.0;
|
|
|
|
+ let limitWithNativeFramebufferScaleFactor = false;
|
|
let referenceSpace = null;
|
|
let referenceSpace = null;
|
|
let referenceSpaceType = 'local-floor';
|
|
let referenceSpaceType = 'local-floor';
|
|
let customReferenceSpace = null;
|
|
let customReferenceSpace = null;
|
|
@@ -16359,8 +16360,9 @@ class WebXRManager extends EventDispatcher {
|
|
type: 'sessionend'
|
|
type: 'sessionend'
|
|
});
|
|
});
|
|
}
|
|
}
|
|
- this.setFramebufferScaleFactor = function (value) {
|
|
|
|
|
|
+ this.setFramebufferScaleFactor = function (value, limited = false) {
|
|
framebufferScaleFactor = value;
|
|
framebufferScaleFactor = value;
|
|
|
|
+ limitWithNativeFramebufferScaleFactor = limited;
|
|
if (scope.isPresenting === true) {
|
|
if (scope.isPresenting === true) {
|
|
console.warn('THREE.WebXRManager: Cannot change framebuffer scale while presenting.');
|
|
console.warn('THREE.WebXRManager: Cannot change framebuffer scale while presenting.');
|
|
}
|
|
}
|
|
@@ -16404,6 +16406,12 @@ class WebXRManager extends EventDispatcher {
|
|
if (attributes.xrCompatible !== true) {
|
|
if (attributes.xrCompatible !== true) {
|
|
await gl.makeXRCompatible();
|
|
await gl.makeXRCompatible();
|
|
}
|
|
}
|
|
|
|
+ if (limitWithNativeFramebufferScaleFactor === true && XRWebGLLayer.getNativeFramebufferScaleFactor) {
|
|
|
|
+ const nativeFramebufferScaleFactor = XRWebGLLayer.getNativeFramebufferScaleFactor(session);
|
|
|
|
+ if (nativeFramebufferScaleFactor < framebufferScaleFactor) {
|
|
|
|
+ framebufferScaleFactor = nativeFramebufferScaleFactor;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
if (session.renderState.layers === undefined || renderer.capabilities.isWebGL2 === false) {
|
|
if (session.renderState.layers === undefined || renderer.capabilities.isWebGL2 === false) {
|
|
const layerInit = {
|
|
const layerInit = {
|
|
antialias: session.renderState.layers === undefined ? attributes.antialias : true,
|
|
antialias: session.renderState.layers === undefined ? attributes.antialias : true,
|
|
@@ -19296,12 +19304,12 @@ class LOD extends Object3D {
|
|
const levels = source.levels;
|
|
const levels = source.levels;
|
|
for (let i = 0, l = levels.length; i < l; i++) {
|
|
for (let i = 0, l = levels.length; i < l; i++) {
|
|
const level = levels[i];
|
|
const level = levels[i];
|
|
- this.addLevel(level.object.clone(), level.distance);
|
|
|
|
|
|
+ this.addLevel(level.object.clone(), level.distance, level.hysteresis);
|
|
}
|
|
}
|
|
this.autoUpdate = source.autoUpdate;
|
|
this.autoUpdate = source.autoUpdate;
|
|
return this;
|
|
return this;
|
|
}
|
|
}
|
|
- addLevel(object, distance = 0) {
|
|
|
|
|
|
+ addLevel(object, distance = 0, hysteresis = 0) {
|
|
distance = Math.abs(distance);
|
|
distance = Math.abs(distance);
|
|
const levels = this.levels;
|
|
const levels = this.levels;
|
|
let l;
|
|
let l;
|
|
@@ -19312,6 +19320,7 @@ class LOD extends Object3D {
|
|
}
|
|
}
|
|
levels.splice(l, 0, {
|
|
levels.splice(l, 0, {
|
|
distance: distance,
|
|
distance: distance,
|
|
|
|
+ hysteresis: hysteresis,
|
|
object: object
|
|
object: object
|
|
});
|
|
});
|
|
this.add(object);
|
|
this.add(object);
|
|
@@ -19325,7 +19334,11 @@ class LOD extends Object3D {
|
|
if (levels.length > 0) {
|
|
if (levels.length > 0) {
|
|
let i, l;
|
|
let i, l;
|
|
for (i = 1, l = levels.length; i < l; i++) {
|
|
for (i = 1, l = levels.length; i < l; i++) {
|
|
- if (distance < levels[i].distance) {
|
|
|
|
|
|
+ let levelDistance = levels[i].distance;
|
|
|
|
+ if (levels[i].object.visible) {
|
|
|
|
+ levelDistance -= levelDistance * levels[i].hysteresis;
|
|
|
|
+ }
|
|
|
|
+ if (distance < levelDistance) {
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -19350,7 +19363,11 @@ class LOD extends Object3D {
|
|
levels[0].object.visible = true;
|
|
levels[0].object.visible = true;
|
|
let i, l;
|
|
let i, l;
|
|
for (i = 1, l = levels.length; i < l; i++) {
|
|
for (i = 1, l = levels.length; i < l; i++) {
|
|
- if (distance >= levels[i].distance) {
|
|
|
|
|
|
+ let levelDistance = levels[i].distance;
|
|
|
|
+ if (levels[i].object.visible) {
|
|
|
|
+ levelDistance -= levelDistance * levels[i].hysteresis;
|
|
|
|
+ }
|
|
|
|
+ if (distance >= levelDistance) {
|
|
levels[i - 1].object.visible = false;
|
|
levels[i - 1].object.visible = false;
|
|
levels[i].object.visible = true;
|
|
levels[i].object.visible = true;
|
|
} else {
|
|
} else {
|
|
@@ -19372,7 +19389,8 @@ class LOD extends Object3D {
|
|
const level = levels[i];
|
|
const level = levels[i];
|
|
data.object.levels.push({
|
|
data.object.levels.push({
|
|
object: level.object.uuid,
|
|
object: level.object.uuid,
|
|
- distance: level.distance
|
|
|
|
|
|
+ distance: level.distance,
|
|
|
|
+ hysteresis: level.hysteresis
|
|
});
|
|
});
|
|
}
|
|
}
|
|
return data;
|
|
return data;
|
|
@@ -27874,7 +27892,7 @@ class ObjectLoader extends Loader {
|
|
const level = levels[l];
|
|
const level = levels[l];
|
|
const child = object.getObjectByProperty('uuid', level.object);
|
|
const child = object.getObjectByProperty('uuid', level.object);
|
|
if (child !== undefined) {
|
|
if (child !== undefined) {
|
|
- object.addLevel(child, level.distance);
|
|
|
|
|
|
+ object.addLevel(child, level.distance, level.hysteresis);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|