|
@@ -54064,6 +54064,93 @@
|
|
|
|
|
|
}
|
|
|
|
|
|
+ };
|
|
|
+
|
|
|
+ function ascSort$1( a, b ) {
|
|
|
+
|
|
|
+ return a.distance - b.distance;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ function intersectObject$1( object, raycaster, intersects, recursive, ignoreUnvisible ) {
|
|
|
+
|
|
|
+ if(ignoreUnvisible && !object.visible)return //add
|
|
|
+
|
|
|
+ if ( object.layers.test( raycaster.layers ) ) {
|
|
|
+
|
|
|
+ object.raycast( raycaster, intersects );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if ( recursive === true ) {
|
|
|
+
|
|
|
+ const children = object.children;
|
|
|
+
|
|
|
+ for ( let i = 0, l = children.length; i < l; i ++ ) {
|
|
|
+
|
|
|
+ intersectObject$1( children[ i ], raycaster, intersects, true, ignoreUnvisible);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ Raycaster.prototype.intersectObject = function ( object, recursive, optionalTarget, ignoreUnvisible ) {
|
|
|
+
|
|
|
+ const intersects = optionalTarget || [];
|
|
|
+
|
|
|
+ intersectObject$1( object, this, intersects, recursive, ignoreUnvisible );
|
|
|
+
|
|
|
+ intersects.sort( ascSort$1 );
|
|
|
+
|
|
|
+ return intersects;
|
|
|
+
|
|
|
+ };
|
|
|
+
|
|
|
+ Raycaster.prototype.intersectObjects = function ( objects, recursive, optionalTarget, ignoreUnvisible ) {//add ignoreUnvisible 跳过不可见
|
|
|
+
|
|
|
+ const intersects = optionalTarget || [];
|
|
|
+
|
|
|
+ if ( Array.isArray( objects ) === false ) {
|
|
|
+
|
|
|
+ console.warn( 'THREE.Raycaster.intersectObjects: objects is not an Array.' );
|
|
|
+ return intersects;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ for ( let i = 0, l = objects.length; i < l; i ++ ) {
|
|
|
+
|
|
|
+ intersectObject$1( objects[ i ], this, intersects, recursive, ignoreUnvisible );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ intersects.sort( ascSort$1 );
|
|
|
+
|
|
|
+ return intersects;
|
|
|
+
|
|
|
+ };
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ Object3D.prototype.realVisible = function(){
|
|
|
+ let v = true;
|
|
|
+ let parent = this;
|
|
|
+ let lastParent;
|
|
|
+ while(parent){
|
|
|
+ if(parent.visible === false){
|
|
|
+ v = false;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ lastParent = parent;
|
|
|
+ parent = parent.parent;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(v && !(lastParent instanceof Scene)){//已被删除
|
|
|
+ v = false;
|
|
|
+ }
|
|
|
+ return v
|
|
|
};
|
|
|
|
|
|
var MathLight = {};
|
|
@@ -91923,7 +92010,7 @@ void main()
|
|
|
//this.hoverViewport.beforeRender && this.hoverViewport.beforeRender()
|
|
|
|
|
|
viewer.dispatchEvent( {type:'raycaster', viewport: this.hoverViewport});//add
|
|
|
- let intersections = raycaster.intersectObjects(interactables.filter(o => o.visible), true); //原本是false 检测不到children
|
|
|
+ let intersections = raycaster.intersectObjects(interactables.filter(o => o.visible), true, null, true); //原本是false 检测不到children
|
|
|
|
|
|
let intersectionsCopy = intersections.slice();
|
|
|
|
|
@@ -98584,17 +98671,17 @@ void main()
|
|
|
if (!pano) {
|
|
|
console.error("Player.checkAndWaitForTiledPanoLoad() -> Cannot load texture for null pano.");
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
var vectorForward = this.getTileDirection();
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
if (!pano.isLoaded(basePanoSize)) {
|
|
|
iswait && viewer.waitForLoad(pano, function() {//发送loading
|
|
|
return pano.isLoaded(basePanoSize)
|
|
|
});
|
|
|
-
|
|
|
+
|
|
|
|
|
|
-
|
|
|
+
|
|
|
/* var fov = {//test for direction 预加载的边缘有一丢丢不准确,尤其在相机倾斜时(4dkk也是)。
|
|
|
hFov: cameraLight.getHFOVForCamera(viewer.scene.getActiveCamera() ),
|
|
|
vFov: viewer.scene.getActiveCamera().fov
|
|
@@ -98648,8 +98735,8 @@ void main()
|
|
|
let depthTiming = Potree.timeCollect.depthSampler.median;
|
|
|
let checkIntersect = o.checkIntersect;// && depthTiming < 0.3
|
|
|
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
if(o.boundSphere){//只接受boundSphere
|
|
|
let aspect = 1;//size.x / size.y
|
|
|
let dis;
|
|
@@ -99739,12 +99826,12 @@ void main()
|
|
|
|
|
|
viewer.addTimeMark('updateCube','end');
|
|
|
|
|
|
-
|
|
|
+
|
|
|
/*
|
|
|
关于卡顿:
|
|
|
即使使用cube,若scale设置为只容纳两个pano,也会卡顿。但也是有的卡有的不卡。
|
|
|
若按照原先的复杂geo,一般在平直的街道上行走流畅,经过拐弯或者复杂区域较卡。减小geo复杂度没有什么作用。
|
|
|
-
|
|
|
+
|
|
|
|
|
|
注: 修改skybox,若不准的话,会遮住其他mesh,比如marker。尤其在没有深度贴图时。
|
|
|
|
|
@@ -146573,7 +146660,8 @@ ENDSEC
|
|
|
if (!renderMap[tile.id]) {
|
|
|
console.error('TILE SELECTED BUT NOT LOADED!!', tile.id);
|
|
|
}
|
|
|
- else {
|
|
|
+ else {
|
|
|
+
|
|
|
// Make sure it's visible
|
|
|
if(!renderMap[tile.id].visible){
|
|
|
if(visiVertexCount<maxVertexVisi){
|
|
@@ -146583,7 +146671,11 @@ ENDSEC
|
|
|
}else {
|
|
|
console.log('超出', visiVertexCount);
|
|
|
}
|
|
|
- }
|
|
|
+ }
|
|
|
+ /* if(!renderMap[tile.id].realVisible()){
|
|
|
+ console.error('!realVisible')
|
|
|
+ } */
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
@@ -146775,14 +146867,14 @@ ENDSEC
|
|
|
}
|
|
|
}
|
|
|
function createGLTFNodes(gltfLoader, tile, unlitMaterial, options, rootTransformInverse) {
|
|
|
-
|
|
|
+
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
return new Promise((resolve, reject) => {
|
|
|
var _a;
|
|
|
const rotateX = new Matrix4().makeRotationAxis(new Vector3(1, 0, 0), Math.PI / 2);
|
|
|
const shouldRotate = ((_a = tile.tileset.asset) === null || _a === void 0 ? void 0 : _a.gltfUpAxis) !== "Z";
|
|
|
// The computed trasnform already contains the root's transform, so we have to invert it
|
|
|
- const contentTransform = new Matrix4() .fromArray(tile.computedTransform).premultiply(rootTransformInverse); //xzw 删。原先的会造成移动后tiles错乱
|
|
|
+ const contentTransform = new Matrix4().fromArray(tile.computedTransform).premultiply(rootTransformInverse); //xzw 删。原先的会造成移动后tiles错乱
|
|
|
if (shouldRotate) {
|
|
|
contentTransform.multiply(rotateX); // convert from GLTF Y-up to Z-up
|
|
|
}
|