OSVR HMD的Json描述符文件结构分析(V1)

来源:互联网 发布:阿里云域名过户流程 编辑:程序博客网 时间:2024/05/21 17:04

基于OSVR-Core 0.6-1962-g59773924

所用到的例子为zSight 1920-100. zSight是什么意思?该实例在部分OSVR发行版上可用。

因为并不是所有的JSON解析器(尤其是Python JSON解释器)接受C风格的注释。因此,这里采用独立文档形式来表述这些描述符。也可参考JSON规范文件。

文件开头于一个版本号,随后才展开主体hmd对象。

{    "meta": {      "schemaVersion": 1    },    "hmd": {  

device节点对图像的渲染不会产生影响。它提供需要使用到的HMD名字,以及可用HMD的清单等。

"device": {        "vendor": "Sensics",        "model": "zSight 1920-100",        "Version": "",        "Note": ""      },  

它们在osvr_rendermanager中的文件OSVR-RenderManager\osvr\RenderKit\osvr_display_configuration.cpp被解析,其他节点也都在这个文件被解析后,传往APP:

void OSVRDisplayConfiguration::parse(const std::string& display_description) {  ......          // Device properties          auto processDeviceData = [&](Json::Value const& devprops) {              m_vendor = devprops["vendor"].asString();              m_model = devprops["model"].asString();              m_version = devprops["Version"].asString();              m_note = devprops["Note"].asString();          };    ......  }  
字段field_of_view定义HMD的光学参数。因为一些HMD有部分重叠---意思是左右眼的视觉方向不是完全一致--因此视场角的定义就是双眼各自不重叠部分加上双眼重叠部分。

monocular_horizontal和monocular_vertical的单位为度。overlap_precent为重叠区角度和全视场角度(双眼各自不重叠部分+双眼重叠部分)的百分比。如下图所示为Sensics的dSight视觉方向(什么是dSight?),左眼红色,右眼绿色,虚线为正前方:


在本例中,左眼从-60到+35度,右眼从+35度到-60度(正负是怎么判断的?)。因此,共同区域或者说重叠区就处于-35到+35度之间,加起来就是70度。因此:

1.水平单眼视场角就是60+35 = 95度

2.双目重叠区域百分比就是70/95 = 73.68%

还有一些HMD有倾斜向下的视场角,这种情况下,需要给pitch_tilt设置一个正数值(表示倾斜向下)。

(下面给出的例子实际数据好像跟上面的解释没关系?o(╯□╰)o)

"field_of_view": {       "monocular_horizontal": 60,       "monocular_vertical": 33.75,       "overlap_percent": 50,       "pitch_tilt": 0     },  

resolutions数组表示HMD支持的分辨率。一些HMD支持多种分辨率以及多种显示模式。排在最前面的分辨率优先被使用,并且一些解析器可能只能够处理数组中的某一个分辨率。字段如下:

1.width:水平尺寸,以像素为单位的视频输入

2.height:垂直尺寸,以像素为单位的视频输入

3.video_inputs:HMD视频输入端的个数(一般是屏的数量)。一些HMD有2个独立的输入端,每只眼睛对应一个。如果只有一个输入端,并且使用了side-by-side的显示模式,width和height应该设置两边综合起来的宽度和高度值。

4.display_mode:可以是full_screen,horz_side_by_side或者vertical_side_by_side。以下例子:

horizontal side-by-side:


vertical side-by-side:


Full screen:



以下例子阐明支持side-by-side 单屏时和支持双屏full_screen时的写法:


"resolutions": [        {          "width": 1920,          "height": 1080,          "video_inputs": 2,          "display_mode": "full_screen"        },        {          "width": 1920,          "height": 1080,          "video_inputs": 1,          "display_mode": "horz_side_by_side"        }      ],  

distortion节点提供红,绿,蓝畸变校正参数。这些参数来源于osvr/distortionizer工程,可去GitHub上下载编译:

"distortion": {        "k1_red": 0,        "k1_green": 0,        "k1_blue": 0      },  

rendering节点提供的字段可用来旋转左眼或右眼的图像。一些HMD由于内部构造方式的问题会要求旋转图像180度。旋转参数以度为单位。以下是vert_side_by_side显示模式的一张图进行了right_roll 180度的操作。


"rendering": {        "right_roll": 0,        "left_roll": 0      },        "eyes": [        {          "center_proj_x": 0.5,          "center_proj_y": 0.5        }      ]    }  }  

center_proj_x和center_proj_y是什么意思?


原创粉丝点击