您的位置:首页 > 编程语言 > Go语言

Qualcomm_Snapdragon_VR_SDK SvrEye脚本简介(7)

2018-03-05 11:36 465 查看
上一篇文章中介绍了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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: