OSVR HMD的Json描述符文件结构分析(V1)
2017-07-24 18:41
387 查看
基于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时的写法:
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是什么意思?
所用到的例子为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是什么意思?
相关文章推荐
- Launcher2分析(一)---整体结构和配置文件AndroidManifest.xml
- VFS文件系统结构分析
- ELF文件结构描述
- 常用EDA软件的license文件结构分析
- [内核笔记1]内核文件结构与缓存——inode和对应描述
- 一个简单的PDF文件结构的分析
- Laravel5.2目录结构及composer.json文件解析
- 关于可扩展的web架构设计的探索-框架结构的描述文件
- 实例分析Java Class的文件结构
- Class文件结构分析
- FLV文件结构分析(转载加修改)
- Laravel5.2目录结构及composer.json文件解析
- [PE结构分析] 7.相对虚拟地址(RVA)和文件偏移间的转换
- Java中的类文件结构之一:如何分析一个.class文件的二进制码内容
- BT种子文件文件结构分析(转)
- 分析Ext2文件系统结构。
- wsdl文件结构分析
- lucene索引结构(三)-词项向量(TermVector)索引文件结构分析
- U-BOOT-1.1.6-note-文件结构分析注释