|
@@ -2147,8 +2147,7 @@ export class Images360 extends THREE.EventDispatcher{
|
|
|
return this.rankedPanoInDirection(0, direction, option1, option2)
|
|
|
}
|
|
|
rankedPanoInDirection(t, direction, option1, option2){
|
|
|
- //此direction为mouseDirection,是否需要加上相机角度的权重
|
|
|
-
|
|
|
+ //此direction为mouseDirection,是否需要加上相机角度的权重
|
|
|
var panoSet = {
|
|
|
pano: null,
|
|
|
candidates: [] //缓存顺序--如果需要打印的话
|
|
@@ -2189,7 +2188,7 @@ export class Images360 extends THREE.EventDispatcher{
|
|
|
|
|
|
|
|
|
var list = [//决胜项目
|
|
|
- Images360.scoreFunctions.distanceSquared(this.position, 1 ),
|
|
|
+ Images360.scoreFunctions.distanceSquared(this.position, 1 ),
|
|
|
|
|
|
Images360.scoreFunctions[o]( this.position, direction,true),
|
|
|
|
|
@@ -2567,10 +2566,12 @@ export class Images360 extends THREE.EventDispatcher{
|
|
|
rank = o.rank || [],
|
|
|
force = o.force,
|
|
|
getAll = o.getAll,
|
|
|
- bestDistance = o.bestDistance || 0
|
|
|
+ bestDistance = o.bestDistance || 0,
|
|
|
+ dir = o.dir
|
|
|
+
|
|
|
let camera = viewer.scene.getActiveCamera()
|
|
|
- if(target){
|
|
|
- var vec = new THREE.Vector3().subVectors(target,point).normalize()
|
|
|
+ if(target && !dir){
|
|
|
+ dir = new THREE.Vector3().subVectors(target,point).normalize()
|
|
|
}
|
|
|
|
|
|
|
|
@@ -2600,13 +2601,13 @@ export class Images360 extends THREE.EventDispatcher{
|
|
|
}else{
|
|
|
let dis2 = pano.position.distanceToSquared(target); //距离目标点
|
|
|
let vec2 = new THREE.Vector3().subVectors(target,pano.position).normalize()
|
|
|
- let cos = vec.dot(vec2)
|
|
|
+ let cos = dir.dot(vec2)
|
|
|
let result = (- dis1 - Math.pow(dis2 , 1.5)) / (cos + 2) // cos+2是为了调整到1-3, 尽量贴近最佳位置的角度;
|
|
|
//console.log(pano.id, dis1,dis2, cos, result)
|
|
|
return result
|
|
|
}
|
|
|
},(pano)=>{
|
|
|
- if(pano.depthTex && o.checkIntersect){ //没加载好的话,不管了
|
|
|
+ if(pano.depthTex && o.checkIntersect && this.panos.length<20){ //没加载好的话,不管了
|
|
|
let intersect = viewer.inputHandler.ifBlockedByIntersect(target, 0.1 , null, null, null, pano)
|
|
|
if(intersect){
|
|
|
//console.log('intersected', pano.id )
|
|
@@ -3158,21 +3159,22 @@ Images360.scoreFunctions = {
|
|
|
|
|
|
},
|
|
|
|
|
|
- distance: function(pos1, r, ifLog) {
|
|
|
+ distance: function(pos1, r=1, ifLog) {
|
|
|
if(pos1.position)pos1 = pos1.position
|
|
|
return function(pano) {//许钟文 改
|
|
|
var pos2 = pano.position.clone()
|
|
|
- //ifLog && console.log('distanceSquared', pano.id, pos1.distanceToSquared(pos2) * -1 )
|
|
|
+ //ifLog && console.log('distance', pano.id, pos1.distance(pos2) * -1 )
|
|
|
return pos1.distanceTo(pos2) * -1 * r;
|
|
|
}
|
|
|
},
|
|
|
- distanceSquared: function(pos1, r ) {
|
|
|
+ distanceSquared: function(pos1, r=1 ) {
|
|
|
if(pos1.position)pos1 = pos1.position
|
|
|
return function(pano) {//许钟文 改
|
|
|
var pos2 = pano.position.clone()
|
|
|
return pos1.distanceToSquared(pos2) * -1 * r;
|
|
|
}
|
|
|
},
|
|
|
+
|
|
|
angle: function(e, t) {
|
|
|
return function(i) {
|
|
|
var n = i.position.clone().sub(e).normalize();
|