|
@@ -3,7 +3,7 @@ import * as THREE from "../../../libs/three.js/build/three.module.js";
|
|
|
import math from '../utils/math.js'
|
|
|
import browser from '../utils/browser.js'
|
|
|
import Viewport from '../viewer/Viewport.js'
|
|
|
-
|
|
|
+import {ExtendView} from "../../viewer/ExtendView.js";
|
|
|
const texLoader = new THREE.TextureLoader()
|
|
|
const circleGeo = new THREE.CircleGeometry(1.45,100);
|
|
|
const sphereGeo = new THREE.SphereBufferGeometry(0.018,10,10);
|
|
@@ -19,7 +19,7 @@ let maxPX = 1366*1024 //ipad pro. 大于这个分辨率的就直接用devicePix
|
|
|
const width2dPX = Math.round(window.devicePixelRatio >= 2 ? ( window.screen.width * window.screen.height >= maxPX ? window.devicePixelRatio/1.2 : window.devicePixelRatio/1.5)*w : w) //触屏或高分辨率的可能要放大些。但在手机上不能太大
|
|
|
//console.log('width2dPX', width2dPX)
|
|
|
|
|
|
-
|
|
|
+const orthoView = new ExtendView();
|
|
|
|
|
|
export default class Magnifier extends THREE.Object3D {//放大镜or望远镜
|
|
|
constructor (viewer) {
|
|
@@ -242,15 +242,30 @@ export default class Magnifier extends THREE.Object3D {//放大镜or望远镜
|
|
|
|
|
|
const fareast = 300;
|
|
|
//相机位置
|
|
|
- var finalDisToAim = dis>magDisMin ? dis > fareast ? magDisMax : (dis-magDisMin) / (fareast-magDisMin) * (magDisMax-magDisMin) + magDisMin : dis / 2; //dis>magDistance_ ? magDistance_ : dis / 2;
|
|
|
-
|
|
|
+ if(playerCamera.type == 'OrthographicCamera'){
|
|
|
+
|
|
|
+ var finalDisToAim = 2
|
|
|
+
|
|
|
+ }else{
|
|
|
+ var finalDisToAim = dis>magDisMin ? dis > fareast ? magDisMax : (dis-magDisMin) / (fareast-magDisMin) * (magDisMax-magDisMin) + magDisMin : dis / 2; //dis>magDistance_ ? magDistance_ : dis / 2;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
this.camera.position.copy(aimPos).add(dirToCamera.multiplyScalar(finalDisToAim))
|
|
|
this.camera.lookAt(aimPos)
|
|
|
- this.camera.fov = playerCamera.fov / 2
|
|
|
+ this.camera.fov = playerCamera.type == 'OrthographicCamera' ? 30 : playerCamera.fov / 2
|
|
|
this.camera.updateProjectionMatrix()
|
|
|
|
|
|
|
|
|
+ if(playerCamera.type == 'OrthographicCamera'){
|
|
|
+ orthoView.position.copy(this.camera.position)
|
|
|
+
|
|
|
+ orthoView.yaw = viewer.mainViewport.view.yaw;
|
|
|
+ orthoView.pitch = viewer.mainViewport.view.pitch;
|
|
|
+ orthoView.applyToCamera(this.camera)
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
|
|
|
//自身位置
|
|
@@ -260,12 +275,22 @@ export default class Magnifier extends THREE.Object3D {//放大镜or望远镜
|
|
|
let screenPos = pos2d.clone().setY(pos2d.y + (pos2d.y>maxY ? -margin : margin ))
|
|
|
|
|
|
let newPos = new THREE.Vector3(screenPos.x,screenPos.y,0.8).unproject(playerCamera); //z:-1朝外
|
|
|
- let dir = newPos.clone().sub(playerPos).normalize().multiplyScalar(10);//这个数值要大于playerCamera.near
|
|
|
- let s = finalDisToAim // dis>magDisMin ? 1 : dis / magDisMin ;
|
|
|
+ if(playerCamera.type != 'OrthographicCamera'){
|
|
|
+ let dir = newPos.clone().sub(playerPos).normalize().multiplyScalar(10);//这个数值要大于playerCamera.near
|
|
|
+
|
|
|
|
|
|
- //let s = dis>magDisMin ? dis > fareast ? magDisMax : (dis-magDisMin) / (fareast-magDisMin) * (magDisMax-magDisMin) + magDisMin : dis / magDisMin
|
|
|
-
|
|
|
- this.position.copy(playerPos.clone().add(dir))
|
|
|
+
|
|
|
+
|
|
|
+ this.position.copy(playerPos.clone().add(dir))
|
|
|
+ }else{
|
|
|
+ viewer.navCubeViewer.splitScreen.setShiftTarget(viewer.mainViewport, viewer.bound.center)
|
|
|
+ viewer.mainViewport.targetPlane.setFromNormalAndCoplanarPoint( viewer.mainViewport.view.direction.clone(), viewer.bound.center )
|
|
|
+ viewer.mainViewport.targetPlane.projectPoint(newPos, viewer.mainViewport.shiftTarget )
|
|
|
+ this.position.copy(viewer.mainViewport.shiftTarget.clone() )
|
|
|
+
|
|
|
+ //this.position.copy(playerPos.clone().add(dir))
|
|
|
+ }
|
|
|
+ let s = finalDisToAim
|
|
|
this.quaternion.copy(playerCamera.quaternion);
|
|
|
this.targetPoint.position.copy(aimPos);
|
|
|
this.targetPoint.scale.set(s,s,s)
|