zjs_project 1 рік тому
батько
коміт
3a3fce1622

+ 6 - 1
src/components/newBottomCom/viewAI/viewAI.vue

@@ -118,9 +118,14 @@
 					};
 					util.trackRequest(param);
 					let _ps = this.$parent.getVideoPosition();
+					let _scale = this.$parent.getVideoScale();
 					console.warn("_ps",_ps)
 					if(window.__wxjs_environment === 'miniprogram'){
-						wx.miniProgram.navigateTo({url: '/extraPackage/pages/aiPublishPage/aiPublishPage?houseId='+(this.$route.query.houseId || '')+'&coordinate=' + encodeURIComponent(_ps) + '&bgUrl='+this.$route.query.bgUrl+'&videoUrl='+encodeURIComponent(this.dataList[this.selectIndex].url)})
+						wx.miniProgram.navigateTo({url: '/extraPackage/pages/aiPublishPage/aiPublishPage?houseId='+(this.$route.query.houseId || '')
+						+ '&coordinate=' + encodeURIComponent(_ps) 
+						+ '&scale=' + encodeURIComponent(_scale) 
+						+ '&bgUrl='+this.$route.query.bgUrl
+						+ '&videoUrl='+encodeURIComponent(this.dataList[this.selectIndex].url)})
 					}else{
 						Toast({
 							message: '敬请期待',

+ 7 - 3
src/pages/webgl_rxdz_720/webgl_rxdz_720.vue

@@ -65,6 +65,7 @@
 				videoUrl: '', //绿幕视频地址
 				bgUrl: '',
 				coordinate: '',
+				scale:'',
 				hasOneTouch: false,
 				muted: true, //视频是否静音
 			}
@@ -112,6 +113,7 @@
 			this.bgUrl = this.$route.query.bgUrl ||
 				'https://dm.static.elab-plus.com/miniProgram/tears_of_steel_bridge_2k.jpg';
 			this.coordinate = this.$route.query.coordinate || '';
+			this.scale = this.$route.query.scale || '';
 			this.type = this.$route.query.type || '';
 			let screenWidth = window.screen.width;
 			let screenHeight = window.screen.height;
@@ -569,6 +571,11 @@
 					} else {
 						mesh.position.set(0, -10, -10); //设置视频位置
 					}
+					if (that.scale) {
+						let scale = JSON.parse(that.scale);
+						mesh.scale.set(scale.x, scale.y, 1); //设置视频缩放比例
+					}
+					
 					// mesh.lookAt(camera.position);
 					scene.add(mesh);
 					videoMeshGroup.push(mesh);
@@ -617,9 +624,6 @@
 				if (cubeCamera) {
 					cubeCamera.update(renderer, scene);
 				}
-				// if(scene.background){
-				// 	scene.background.scale.set(0.5,0.5,0.5)
-				// }
 				renderer.render(scene, camera); //单次渲染
 				requestId = requestAnimationFrame(render, canvas3d);
 			}

+ 6 - 0
src/pages/webgl_rxdz_clipImg/webgl_rxdz_clipImg.vue

@@ -75,6 +75,7 @@
 				bottomLeftX:0,
 				bottomLeftY:0,
 				coordinate:'',
+				scale:'',
 				screenshotResolve:null,
 			}
 		},
@@ -120,6 +121,7 @@
 			this.videoUrl = this.$route.query.videoUrl || '';
 			this.bgUrl = this.$route.query.bgUrl || 'https://dm.static.elab-plus.com/miniProgram/tears_of_steel_bridge_2k.jpg';
 			this.coordinate = this.$route.query.coordinate || '';
+			this.scale = this.$route.query.scale || '';
 			let screenWidth = window.screen.width;
 			let screenHeight = window.screen.height;
 			if (window.innerWidth && window.screen.width) {
@@ -485,6 +487,10 @@
 				}else{
 					mesh.position.set(0, 0, -10);//设置视频位置
 				}
+				if (that.scale) {
+					let scale = JSON.parse(that.scale);
+					mesh.scale.set(scale.x, scale.y, 1); //设置视频缩放比例
+				}
 				scene.add(mesh);
 				videoMesh = mesh;
 			}

+ 7 - 1
src/pages/webgl_rxdz_vr/webgl_rxdz_vr.scss

@@ -42,7 +42,7 @@ page {
 }
 .rangeview{
 	position: absolute!important;
-	right: 20px;
+	right: 0px;
 	top: 60px;
 }
 // /deep/.el-slider.is-vertical .el-slider__button-wrapper{
@@ -50,6 +50,12 @@ page {
 // 	left: 50%;
 // 	transform: translate(-50%,-50%);
 // }
+/deep/.el-slider__button-wrapper{
+	display: flex;
+	flex-direction: row;
+	align-items: center;
+	justify-content: center;
+}
 // /deep/.el-slider__button-wrapper .el-tooltip, .el-slider__button-wrapper::after{
 // 	    position: relative;
 // 	    top: -50%;

+ 23 - 1
src/pages/webgl_rxdz_vr/webgl_rxdz_vr.vue

@@ -143,6 +143,7 @@
 			let radius = 50;	//全景图半径-全景图是个球体
 			let fingerCount = 0;
 			let lastPosition = new THREE.Vector3(0, -10, -10);
+			let boundingBox = null;
 			init();
 			// this.clearEvent = clearEvent;
 			// this.attendEvent = attendEvent;
@@ -150,6 +151,7 @@
 			this.stopRender = stopRender; //对外暴露停止渲染的方法
 			this.videoHandle = videoHandle;	//视频处理方法
 			this.getVideoPosition = getVideoPosition;	//获取视频位置信息
+			this.getVideoScale = getVideoScale;	//获取视频缩放数据
 			this.videoMeshChange = videoMeshChange;	//数字人缩放方法
 			if(window.__wxjs_environment === 'miniprogram'){
 				this.navbar.showCapsule = 0;
@@ -204,8 +206,11 @@
 				var sphereGeometry = new THREE.SphereGeometry(radius, 60, 40);
 				var sphereMaterial = new THREE.MeshBasicMaterial({ color: 0xff0000 });
 				var sphere = new THREE.Mesh(sphereGeometry, sphereMaterial);
+				sphere.position.set(0,0,0);
+				sphere.geometry.computeBoundingBox();
+
 				// 计算球体的包围盒
-				var boundingBox = new THREE.Box3().setFromObject(sphere);
+				boundingBox = new THREE.Box3().copy(sphere.geometry.boundingBox).applyMatrix4( sphere.matrixWorld);
 				// 监听相机移动事件-限制只能在当前空间范围内移动
 				controls.addEventListener('change', () => {
 					// 检查相机位置是否超出边界框
@@ -482,6 +487,16 @@
 						//   event.object.position.copy(vector.multiplyScalar(10));
 						//限制在只能在水平面上移动
 						event.object.position.y = -10;
+						let position  = event.object.position;
+						// 获取包围球的中心点和半径
+						let sphereCenter = new THREE.Vector3(0, 0, 0);//原点
+						// 计算mesh和圆球中心点之间的距离
+						let distance = position.distanceTo(sphereCenter);
+						// 判断是否超过包围球的半径-1的距离,是的话则限制
+						if (distance > (radius-1)) {
+							const direction = new THREE.Vector3().subVectors(position, sphereCenter).normalize();
+							event.object.position.copy(sphereCenter).addScaledVector(direction, (radius-1));
+						}
 					});
 					dragControls.addEventListener('dragend', function ( event ) {
 						controls.enabled = true;
@@ -507,6 +522,13 @@
 				let _position = JSON.stringify(videoMesh.position);
 				return _position;
 			}
+			function getVideoScale() {
+				if(!videoMesh){
+					return '';
+				}
+				let scale = JSON.stringify(videoMesh.scale);
+				return scale;
+			}
 			function videoMeshChange(data = 50) {
 				if(!videoMesh){
 					return false