瀏覽代碼

调整视角位置

zjs_project 1 年之前
父節點
當前提交
fc57469098
共有 1 個文件被更改,包括 25 次插入24 次删除
  1. 25 24
      src/pages/webgl_rxdz_roam/webgl_rxdz_roam.vue

+ 25 - 24
src/pages/webgl_rxdz_roam/webgl_rxdz_roam.vue

@@ -439,6 +439,7 @@
 				let targetNewPosition = obj.targetNewPosition;
 				let oldUp = {x:0,y:1,z:0};	//俯视
 				let newUp = {x:0,y:1,z:0};	//正视
+				moveTip(cameraNewPosition);
 				console.warn("**moveActor***",JSON.stringify(cameraNewPosition),JSON.stringify(targetNewPosition))
 				tweenCamera(camera.position,controls.target,cameraNewPosition,targetNewPosition,oldUp,newUp,2000);
 				lon = 0;
@@ -479,20 +480,20 @@
 					let _actorTransform = actor.actorTransform.split(',');//旋转角度,取第三个值
 					let _hd = THREE.MathUtils.degToRad(parseInt(_actorTransform[2]));//将度转化为弧度。
 					let _hdY = THREE.MathUtils.degToRad(parseInt(_actorTransform[1]));//Y轴方向上将度转化为弧度。
-					if(parseInt(_actorLoaction[1])==0){//X轴
-						_actorLoaction[1] = spaceObj.centerX;
-					}
-					if(parseInt(_actorLoaction[0])==0){//Y轴
-						_actorLoaction[0] = spaceObj.centerY;
-					}
-					let X_C = _actorLoaction[0] - spaceObj.centerY;//X轴偏移量
-					let Y_C = _actorLoaction[1] - spaceObj.centerX;//Y轴偏移量
+					// if(parseInt(_actorLoaction[1])==0){//X轴
+					// 	_actorLoaction[1] = spaceObj.centerX;
+					// }
+					// if(parseInt(_actorLoaction[0])==0){//Y轴
+					// 	_actorLoaction[0] = spaceObj.centerY;
+					// }
+					let X_C = parseInt(_actorLoaction[0]);//X轴偏移量-UE原因
+					let Y_C = parseInt(_actorLoaction[1]);//Y轴偏移量-对应Three.js 的Z轴
 					let px = spaceObj.centerX + X_C;
-					let py = spaceObj.centerY + Y_C;
+					let py = -spaceObj.centerY + Y_C;//UE里面的值跟Three.js Y轴相反
 					let position = {
 						x:(parseInt(px))/100,
 						y:1.5, 
-						z:-(parseInt(py))/100,//模型Y轴坐标系正负值跟webglZ轴是相反的
+						z:(parseInt(py))/100,//模型Y轴坐标系正负值跟webglZ轴是相反的
 					}
 					//新的观察点的位置-取模型的中心点坐标,加上高度,由于模型都是贴地的,所以高度设置为1.5
 					let targetNewPosition = {
@@ -543,21 +544,21 @@
 				let _actorTransform = defaultActor.actorTransform.split(',');//旋转角度,取第三个值
 				let _hd = THREE.MathUtils.degToRad(parseInt(_actorTransform[2]) + lon);//将度转化为弧度。
 				let _hdY = THREE.MathUtils.degToRad(parseInt(_actorTransform[1]));//Y轴方向上将度转化为弧度。
-				if(parseInt(_actorLoaction[1])==0){//X轴
-					_actorLoaction[1] = spaceObj.centerX;
-				}
-				if(parseInt(_actorLoaction[0])==0){//Y轴
-					_actorLoaction[0] = spaceObj.centerY;
-				}
-				let X_C = _actorLoaction[0] - spaceObj.centerY;//X轴偏移量
-				let Y_C = _actorLoaction[1] - spaceObj.centerX;//Y轴偏移
+				// if(parseInt(_actorLoaction[1])==0){//X轴
+				// 	_actorLoaction[1] = spaceObj.centerX;
+				// }
+				// if(parseInt(_actorLoaction[0])==0){//Y轴
+				// 	_actorLoaction[0] = spaceObj.centerY;
+				// }
+				let X_C = parseInt(_actorLoaction[0]);//X轴偏移量-UE原因
+				let Y_C = parseInt(_actorLoaction[1]);//Y轴偏移量-向
 				let px = spaceObj.centerX + X_C;
-				let py = spaceObj.centerY + Y_C;
+				let py = -spaceObj.centerY + Y_C;
 				//新的摄像机的位置-新的摄像机角度是倾斜角度,所以z值需要计算,高度设置为模型高度的2倍
 				let cameraNewPosition = {
 					x:(parseInt(px))/100,
 					y:1.5, 
-					z:-(parseInt(py))/100,//模型Y轴坐标系正负值跟webglZ轴是相反的
+					z:(parseInt(py))/100,//模型Y轴坐标系正负值跟webglZ轴是相反的
 				}
 				if(cameraNewPosition){
 					let minX = 0,maxX = 0,minY = 0,maxY = 0;//0.1 是模型墙壁厚度
@@ -822,15 +823,15 @@
 						}
 						element.actors.forEach(actor=>{
 							let _actorLoaction = actor.actorLocation.split(',');//x y z
-							let X_C = (parseInt(_actorLoaction[0]) || element.centerY) - element.centerY;//X轴偏移量-UE原因
-							let Y_C = (parseInt(_actorLoaction[1]) || element.centerX) - element.centerX;//Y轴偏移量-向量
+							let X_C = parseInt(_actorLoaction[0]);//X轴偏移量-UE原因
+							let Y_C = parseInt(_actorLoaction[1]);//Y轴偏移量-向量
 							let _x = element.centerX + X_C;
-							let _z = element.centerY + Y_C;
+							let _z = -element.centerY + Y_C;//centerY 要取反,因为UE里面是反向的
 							
 							// let _x = parseInt(_actorLoaction[1]) || element.centerX;//观察点 X轴坐标 
 							// let _z = parseInt(_actorLoaction[0]) || element.centerY;//观察点 Z轴坐标
 							let _presentX = (_x - element.centerX)/((element.spaceWidth/2) - 10);//10是墙壁厚度-单位cm
-							let _presentY = (_z - element.centerY)/((element.spaceHeight/2) - 10);
+							let _presentY = (_z + element.centerY)/((element.spaceHeight/2) - 10);
 							//注意如果一开始就设置大超过空间大小,则处理成贴近空间边界
 							actor.presentX = Math.abs(_presentX)>1 ? (_presentX>1?1:-1) : _presentX;//观察点跟空间中心原点的距离比例
 							actor.presentY = Math.abs(_presentY)>1 ? (_presentY>1?1:-1) : _presentY;