Qualcomm_Snapdragon_VR_SDK SvrManager脚本简介(6)

在SvrManager的Start方法中另一个比较重要的方法为SubmitFrame,具体实现如下:

  IEnumerator SubmitFrame ()
	{
		while(true)
		{
			yield return waitForEndOfFrame;

            var horizontalFieldOfView = 0f;
            if (settings.eyeFovMargin > 0f)
            {
                horizontalFieldOfView = (monoCamera.enabled ? monoCamera.fieldOfView / monoCamera.aspect : leftCamera.fieldOfView / leftCamera.aspect) * Mathf.Deg2Rad;
            }
            plugin.SubmitFrame(frameCount, horizontalFieldOfView, (int)settings.displayType);
			
			frameCount++;
		}
	}

该方法中,通过在协程方法中使用while(true)逻辑语句实现了类似于Update方法。

之后计算水平的Camera FOV值,调用Plugin.SubmitFrame方法传入当前帧数,FOV以及显示类型,之后在SDK底层代码中去刷新当前的帧图像。



void LateUpdate()
    {
        if (!IsRunning)
        {
            return;
        }

        status.pose = plugin.GetPredictedPose(ref headOrientation, ref headPosition, frameCount);

        if (!disableInput)
        {
            if ((status.pose & (int)SvrPlugin.TrackingMode.kTrackingOrientation) != 0)
            {
                head.transform.localRotation = headOrientation;
            }
            if (settings.trackPosition && (status.pose & (int)SvrPlugin.TrackingMode.kTrackingPosition) != 0)
            {
                head.transform.localPosition = headPosition * settings.trackPositionScale;
            }
        }

        var isValid = true;
        if (settings.poseStatusFade)
        {
            isValid = !settings.trackPosition
                || ((plugin.GetTrackingMode() & (int)SvrPlugin.TrackingMode.kTrackingPosition) == 0)
                || (status.pose & (int)SvrPlugin.TrackingMode.kTrackingPosition) != 0;
        }

        var targetAlpha = fadeState == eFadeState.FadeOut || !isValid ? 1f : 0f;
        UpdateOverlayFade(targetAlpha, Time.deltaTime / fadeDuration);
    }


在SvrManager的LateUpdate方法中完成了VR场景头部位置及朝向的刷新逻辑。

plugin.GetPredictedPose(ref headOrientation, ref headPosition, frameCount);

首先是定义了headOrientation以及headPosition变量,保存的是底层SDK中返回的6Dof中位置及朝向的数据。

之后根据TrakingMode的值来判断当前使用哪一组数值更新Camera数据。



阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

Qualcomm_Snapdragon_VR_SDK SvrManager脚本简介(6)

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭