Qualcomm_Snapdragon_VR_SDK SvrEye脚本简介(7)

上一篇文章中介绍了SvrEye中初始化Camera的方法InitializeCameras,具体实现如下:

 void InitializeCameras()
    {
        var deviceInfo = SvrPlugin.Instance.deviceInfo;
        var deviceFov = new Vector2(deviceInfo.targetFovXRad, deviceInfo.targetFovYRad) * Mathf.Rad2Deg;
        var frustum = side == eSide.Right ? deviceInfo.targetFrustumRight : deviceInfo.targetFrustumLeft;

        foreach (var mainCamera in mainCameras)
        {
            if (frustumType == (int)SvrManager.SvrSettings.eFrustumType.Camera)
            {
                mainCamera.fieldOfView = deviceFov.y + FovMargin * deviceFov.y;
                mainCamera.aspect = deviceFov.x / deviceFov.y;
            }
            else if (frustumType == (int)SvrManager.SvrSettings.eFrustumType.Device)
            {
                mainCamera.fieldOfView = deviceFov.y;
                mainCamera.aspect = deviceFov.x / deviceFov.y;
                mainCamera.projectionMatrix = SvrManager.Perspective(frustum.left, frustum.right, frustum.bottom, frustum.top, frustum.near, mainCamera.farClipPlane);
            }
        }
    }

首先在方法中定义了一个deviceInfo的变量,作用是获取当前运行的设备信息,之后根据设备信息计算Camera的Fov数值,DeviceInfo的结构如下:

  public struct DeviceInfo
	{
		public int 		displayWidthPixels;
		public int    	displayHeightPixels;
		public float  	displayRefreshRateHz;
		public int    	targetEyeWidthPixels;
		public int    	targetEyeHeightPixels;
		public float  	targetFovXRad;
		public float  	targetFovYRad;
        public ViewFrustum targetFrustumLeft;
        public ViewFrustum targetFrustumRight;
	}

其中displayWidthPixel和displayHeightPixel分别为设备显示的宽、高像素。

displayRefreshRateHz为设备的刷新率,单位为hz。

targetEyeWidthPixels和targetEyeHeightPixels为左右眼目标的宽、高像素。

targetFovXRad和targetFovYRad为左右眼目标的Fov的弧度值。

而在InitializeCameras方法中Fov的计算正是通过这两个值来计算出来了:

var deviceFov = new Vector2(deviceInfo.targetFovXRad, deviceInfo.targetFovYRad) * Mathf.Rad2Deg;

之后方法中会遍历当前场景中的Camera物体,并设置Camera中的Fov等参数:

 foreach (var mainCamera in mainCameras)
        {
            if (frustumType == (int)SvrManager.SvrSettings.eFrustumType.Camera)
            {
                mainCamera.fieldOfView = deviceFov.y + FovMargin * deviceFov.y;
                mainCamera.aspect = deviceFov.x / deviceFov.y;
            }
            else if (frustumType == (int)SvrManager.SvrSettings.eFrustumType.Device)
            {
                mainCamera.fieldOfView = deviceFov.y;
                mainCamera.aspect = deviceFov.x / deviceFov.y;
                mainCamera.projectionMatrix = SvrManager.Perspective(frustum.left, frustum.right, frustum.bottom, frustum.top, frustum.near, mainCamera.farClipPlane);
            }
        }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值