コード例 #1
0
    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 });
    }
コード例 #2
0
    //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)));
    }