zhouenguang 3 years ago
parent
commit
5e8af588ab
3 changed files with 40 additions and 5 deletions
  1. 2 1
      src/ActionsHandler.js
  2. 17 3
      src/XSceneManager.js
  3. 21 1
      src/Xverse_Room.js

+ 2 - 1
src/ActionsHandler.js

@@ -66,7 +66,7 @@ export default class ActionsHandler {
             
             pathArr.forEach(point => {
                 // todo 矫正
-                let ue4Pos = util.xversePosition2Ue4({x: point.location.x-0.8, y: point.location.y, z: point.location.z+0.8})
+                let ue4Pos = util.xversePosition2Ue4({x: -point.location.x-0.8, y: point.location.y, z: point.location.z+0.8})
                 point.location = new BABYLON.Vector3(ue4Pos.x, ue4Pos.y, ue4Pos.z)
             })
 
@@ -211,6 +211,7 @@ export default class ActionsHandler {
         let closestPoint = window.room.sceneManager.getClosestPointData(t)
         let closestPointSelf = window.room.sceneManager.getClosestPointData(player.position)
 
+        console.error(closestPointSelf.position0, closestPoint.position0)
         window.connection.socket.emit("getRoute", {
             sceneCode: "testApp",
             userId: "testUser",

+ 17 - 3
src/XSceneManager.js

@@ -470,14 +470,28 @@ export default class XSceneManager {
         })
         .then(response => response.json())
         .then(response => {
+            this.texture = new BABYLON.Texture("https://4dkk.4dage.com/v3/img/marker.png", this.scene);
             response.forEach(data => {
-                // 当前json数据坐标处理有问题,x需取负,转BABYLON默认坐标
-                // 又根据xversePosition2Ue4方法猜测,xverse坐标和BABYLON默认坐标xy方向相反,xz再次取负
+                var plane = new BABYLON.Mesh.CreatePlane("TextPlane", 0.2, this.scene, true);
+                plane.material = new BABYLON.StandardMaterial("TextPlaneMaterial", this.scene);
+                plane.material.alpha = 1,
+                plane.material.emissiveTexture = this.texture,
+                plane.material.backFaceCulling = true,
+                plane.material.diffuseTexture = this.texture,
+                plane.material.diffuseTexture.hasAlpha = !0,
+                plane.material.useAlphaFromDiffuseTexture = !0
+
+                plane.rotation.x = Math.PI / 2
+                plane.position.x = -data.position.x - 0.8;  // 1
+                plane.position.y = data.position.y+0.01;
+                plane.position.z = data.position.z + 0.8;   // 1
+
                 // todo 矫正
-                let ue4Pos = util.xversePosition2Ue4({x: data.position.x-0.8, y: data.position.y, z: data.position.z+0.8})
+                let ue4Pos = util.xversePosition2Ue4({x: -data.position.x - 0.8, y: data.position.y, z: data.position.z + 0.8}) // 1
                 // console.error(data.position, ue4Pos)
                 data.position0 = data.position
                 data.position = new BABYLON.Vector3(ue4Pos.x, ue4Pos.y, ue4Pos.z)
+
             })
             window.points = response
         })

+ 21 - 1
src/Xverse_Room.js

@@ -171,7 +171,7 @@ export default class Xverse_Room extends EventEmitter {
         let info = this.ray.intersectsMeshes(this.sceneManager.getGround())[0];
 
         // todo 矫正
-        const offset = 0.09
+        const offset = 0.09 // 0.05
         if(info) {
             info.distance = Math.min(info.distance, 4.5 + offset)
             cameraPosXverse = cameraCenterXverse.add(this.ray.direction.clone().scale(Math.max( info.distance - offset, 0.1 )))
@@ -247,6 +247,26 @@ export default class Xverse_Room extends EventEmitter {
         let cameraPos = new BABYLON.Vector3( cameraPosTemp.x, cameraPosTemp.y, cameraPosTemp.z )
         let cameraPosNew = cameraPos.add(walkDistanceVec)
 
+        
+        // // 相机碰撞检测
+        // let cameraPosXverse = util.ue4Position2Xverse(cameraPosNew)
+        // let cameraCenterXverse = util.ue4Position2Xverse(playerPosNew)
+        // cameraCenterXverse.y = cameraPosXverse.y
+
+        // if(!this.ray) this.ray = new BABYLON.Ray(new BABYLON.Vector3(0,0,0), new BABYLON.Vector3(0,0,1), 50);
+        // this.ray.origin = cameraCenterXverse
+        // this.ray.direction = BABYLON.Vector3.Normalize( cameraPosXverse.clone().subtract(cameraCenterXverse) )
+        // let info = this.ray.intersectsMeshes(this.sceneManager.getGround())[0];
+
+        // // todo 矫正
+        // const offset = 0.09 // 0.05
+        // if(info) {
+        //     info.distance = Math.min(info.distance, 4.5 + offset)
+        //     cameraPosXverse = cameraCenterXverse.add(this.ray.direction.clone().scale(Math.max( info.distance - offset, 0.1 )))
+        //     cameraPosNew = util.xversePosition2Ue4(cameraPosXverse)
+        // }
+
+
         let cameraRota = util.xverseRotation2Ue4(this.sceneManager.cameraComponent.mainCamera.rotation)
         
         if(player.position){