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数据。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值