xushiting 3 年 前
コミット
d4034ef6a3

+ 61 - 7
src/main/java/com/fdkk/fdkkmeta/grpcService/sceneGrpcServer.java

@@ -10,6 +10,7 @@ import com.fdkk.fdkkmeta.config.MetaConfig;
 import com.fdkk.fdkkmeta.domain.dto.RouteDto;
 import com.fdkk.fdkkmeta.domain.entity.mysql.BreakpointsEntity;
 import com.fdkk.fdkkmeta.domain.entity.mysql.RotateFrameEntity;
+import com.fdkk.fdkkmeta.domain.entity.mysql.MoveFrameEntity;
 import com.fdkk.fdkkmeta.domain.entity.mysql.UserEntity;
 import com.fdkk.fdkkmeta.domain.po.AnglePO;
 import com.fdkk.fdkkmeta.domain.po.PointPO;
@@ -240,18 +241,15 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
      		String user_id = request.getUserId();
 
             UserEntity user = userService.findUserId(user_id);
+            String appId = user.getAppId();
 			Long breakPointId = user.getBreakPointId();
-			BreakpointsEntity breakpointsEntity = breakpointsService.findByAppIdAndBreakPointId(user.getAppId(),breakPointId);
+			BreakpointsEntity breakpointsEntity = breakpointsService.findByAppIdAndBreakPointId(appId,breakPointId);
             RotateFrameEntity rotateFrameEntity = rotateFrameService.findById(user.getFrameId());
 
             Point start = null;    //从user表里取
 
             boolean isEnd = false;
      		//计算路径
-
-
-
-            String appId = user.getAppId();
             RouteDto po=new RouteDto();
             PointPO s=new PointPO();
             s.setX(Double.parseDouble(start.getX()));
@@ -307,14 +305,44 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
                 Point cameraPosition = createPoint(String.valueOf(cameraPoint.getX()),String.valueOf(cameraPoint.getY()),String.valueOf(cameraPoint.getZ()));
                 AngleUe4 cameraAngle = createAngle(cameraAnglePO.getPitch(),cameraAnglePO.getYaw(),cameraAnglePO.getRoll());
                 Space camera = createSpace(cameraPosition,cameraAngle);
+                
             	Point cameraCenter = createPoint(String.valueOf(playerPoint.getX()),String.valueOf(playerPoint.getY()),String.valueOf(playerPoint.getZ()));
             	String frameSrc = metaConfig.getVideoFramePath()+"/"+_rotateFrameEntity.getDirectory()+"/"+_rotateFrameEntity.getFileName();
             	//添加player,camera,cameraCenter,frameSrc
 
             }
 
-            moveFrameService.findByAppIAndStartBreakPointIdAndEndBreakPointIdAndAngle(appId, breakPointId, nextbreakPointId, (int)(offAngle + angle)/45);
+            breakpointsEntity = breakpointsService.findByAppIdAndBreakPointId(appId,nextbreakPointId);
+            PointPO endPosition = breakpointsEntity.getPosition();
+            
+            JSONObject p1 = new JSONObject();
+            p1.put("x", playerPoint.getX());
+            p1.put("x", playerPoint.getX());
+            
+            JSONObject p2 = new JSONObject();
+            JSONObject p3 = new JSONObject();
+            calAngle(JSONObject o, JSONObject s, JSONObject e)
+            _playerAngle
+            List<MoveFrameEntity> moveFrameEntityList = moveFrameService.findByAppIAndStartBreakPointIdAndEndBreakPointIdAndAngle(appId, breakPointId, nextbreakPointId, (int)(offAngle + angle)/45);
+            
+            double offsetX = endPosition.getX() - playerPoint.getX();
+            double offsetY = endPosition.getY() - playerPoint.getY();
+            double offsetZ = endPosition.getZ() - playerPoint.getZ();
             
+            for(int i=0;i<moveFrameEntityList.size();++i) {
+            	MoveFrameEntity _moveFrameEntityList = moveFrameEntityList.get(i);
+            	PointPO cameraPoint = _moveFrameEntityList.getCameraPosition();
+            	Point cameraPosition = createPoint(String.valueOf(cameraPoint.getX()),String.valueOf(cameraPoint.getY()),String.valueOf(cameraPoint.getZ()));
+            	AngleUe4 cameraAngle = createAngle(cameraAnglePO.getPitch(),cameraAnglePO.getYaw(),cameraAnglePO.getRoll());
+                Space camera = createSpace(cameraPosition,cameraAngle);
+                
+            	Point cameraCenter = createPoint(String.valueOf(playerPoint.getX()),String.valueOf(playerPoint.getY()),String.valueOf(playerPoint.getZ()));
+            	String frameSrc = metaConfig.getVideoFramePath()+"/"+_moveFrameEntityList.getDirectory()+"/"+_moveFrameEntityList.getFileName();
+            	
+            	Point _playerPosition = createPoint(String.valueOf(playerPoint.getX()+offsetX/moveFrameEntityList.size()),String.valueOf(playerPoint.getY()+offsetY/moveFrameEntityList.size()),String.valueOf(playerPoint.getZ()+offsetZ/moveFrameEntityList.size()));
+            	Space _player = createSpace(_playerPosition,_playerAngle);
+            	//添加player,camera,cameraCenter,frameSrc
+            }
             
 //          PointPO cameraPoint = rotateFrameEntity.getCameraPosition();
 //          Point cameraPosition = createPoint(String.valueOf(cameraPoint.getX()),String.valueOf(cameraPoint.getY()),String.valueOf(cameraPoint.getZ()));
@@ -592,5 +620,31 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
     	return angle;
     }
 
-
+    /**
+     * 根据余弦定理计算线段1到线段2的夹角,线段1:起始点到原点,线段2:原点到结束点)
+     * @param o 原点
+     * @param s 起始点
+     * @param e 结束点
+     * @return
+     */
+    private double calAngle(JSONObject o, JSONObject s, JSONObject e) {
+        double cosfi = 0;
+        double fi = 0;
+        double norm = 0;
+        double dsx = s.getDoubleValue("x") - o.getDoubleValue("x");
+        double dsy = s.getDoubleValue("y") - o.getDoubleValue("y");
+        double dex = e.getDoubleValue("x") - o.getDoubleValue("x");
+        double dey = e.getDoubleValue("y") - o.getDoubleValue("y");
+        cosfi = dsx * dex + dsy * dey;
+        norm = (dsx * dsx + dsy * dsy) * (dex * dex + dey * dey);
+        cosfi /= Math.sqrt(norm);
+        if (cosfi >= 1.0) return 0;
+        if (cosfi <= -1.0) return Math.PI;
+        fi = Math.acos(cosfi);
+        if (180 * fi / Math.PI < 180) {
+            return 180 * fi / Math.PI;
+        } else {
+            return 360 - 180 * fi / Math.PI;
+        }
+    }
 }

+ 1 - 1
src/main/java/com/fdkk/fdkkmeta/service/MoveFrameService.java

@@ -10,5 +10,5 @@ import java.util.List;
  */
 public interface MoveFrameService extends IBaseService<MoveFrameEntity> {
     List<MoveFrameEntity> findByAppId(String AppId);
-    MoveFrameEntity findByAppIAndStartBreakPointIdAndEndBreakPointIdAndAngle(String appId,Long startBreakPointId,Long endBreakPointId,Integer angle);
+    List<MoveFrameEntity> findByAppIAndStartBreakPointIdAndEndBreakPointIdAndAngle(String appId,Long startBreakPointId,Long endBreakPointId,Integer angle);
 }

+ 2 - 2
src/main/java/com/fdkk/fdkkmeta/service/impl/MoveFrameServiceImpl.java

@@ -26,13 +26,13 @@ public class MoveFrameServiceImpl extends BaseServiceImpl<MoveFramesMapper, Move
     }
 
     @Override
-    public MoveFrameEntity findByAppIAndStartBreakPointIdAndEndBreakPointIdAndAngle(String appId, Long startBreakPointId, Long endBreakPointId, Integer angle) {
+    public List<MoveFrameEntity> findByAppIAndStartBreakPointIdAndEndBreakPointIdAndAngle(String appId, Long startBreakPointId, Long endBreakPointId, Integer angle) {
         LambdaQueryWrapper<MoveFrameEntity> wrapper = Wrappers.lambdaQuery();
         wrapper.eq(MoveFrameEntity::getAppId, appId);
         wrapper.eq(MoveFrameEntity::getStartBreakPointId, startBreakPointId);
         wrapper.eq(MoveFrameEntity::getEndBreakPointId, endBreakPointId);
         wrapper.eq(MoveFrameEntity::getAngle, angle);
-        return getOne(wrapper);
+        return list(wrapper);
     }