|
@@ -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;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|