private int[] GetEveryDirectionCamId() { int uId = nowCameraId; int dId = nowCameraId; int lId = nowCameraId; int rId = nowCameraId; float uv = 0; float dv = 0; float lv = 0; float rv = 0; int width = videoPlayer.targetTexture.width; int height = videoPlayer.targetTexture.height; var mainCamPixel = panelVideoController.EulerAngleToPixel(mainNFOVCamera.transform.eulerAngles); for (int camId = 0; camId < panelVideoController.cameraGroupNum; camId++) { if (camId == nowCameraId) { continue; } var pixel = panelVideoController.EulerAngleToPixel(panelVideoController.cameraNFOVs[camId].transform.eulerAngles); if (pixel.y < mainCamPixel.y) {//up var upOffset = mainCamPixel.y - pixel.y; if (uId == nowCameraId || upOffset < uv) { uId = camId; uv = upOffset; } } if (pixel.y > mainCamPixel.y) {//down var downOffset = pixel.y - mainCamPixel.y; if (dId == nowCameraId || downOffset < dv) { dId = camId; dv = downOffset; } } var tmp = mainCamPixel.x - pixel.x; var leftOffset = tmp < 0 ? tmp + width : tmp; var rightOffset = tmp > 0 ? width - tmp : -tmp; if (lId == nowCameraId || leftOffset < lv) {//left lId = camId; lv = leftOffset; } if (rId == nowCameraId || rightOffset < rv)//right { rId = camId; rv = rightOffset; } } return(new int[] { uId, dId, lId, rId }); }
//Limit the maximum moving speed to prevent the window from shaking too much public Vector3 ApplyMaxSpeedLimit(Vector3 fa, Vector3 fb, float t) { if (fa.Equals(fb)) { return(fa); } var originSize = new Vector2(videoPlayer.targetTexture.width, videoPlayer.targetTexture.height); int downsampleWidth, downsampleHeight; opticalFlowCamerasController.GetDownsampleSize(out downsampleWidth, out downsampleHeight); var cameraCalculate = manager.cameraCalculate; cameraCalculate.transform.forward = fa; var ea = cameraCalculate.transform.eulerAngles; var pa = panelVideoController.EulerAngleToPixel(ea); pa = opticalFlowCamerasController.PixelToOriginPixelFloatValue(pa, originSize, new Vector2(downsampleWidth, downsampleHeight)); cameraCalculate.transform.forward = fb; var eb = cameraCalculate.transform.eulerAngles; var pb = panelVideoController.EulerAngleToPixel(eb); pb = opticalFlowCamerasController.PixelToOriginPixelFloatValue(pb, originSize, new Vector2(downsampleWidth, downsampleHeight)); var v = opticalFlowCamerasController.GetVector2Of2Pixels(pa, pb, downsampleWidth); if (v.magnitude == 0) { return(fa); } v = v / v.magnitude * Mathf.Min(maxSpeed * t, v.magnitude); Debug.Log("ApplyMaxSpeedLimit"); Debug.Log(string.Format("t:{0}, v: {1}", t, v)); var p = pa + v; OpticalFlowCamerasController.NormalizePixelInRange(ref p.x, ref p.y, downsampleWidth, downsampleHeight); return(panelVideoController.PixelToVector3(opticalFlowCamerasController.PixelToOriginPixelFloatValue(p, new Vector2(downsampleWidth, downsampleHeight), originSize))); }