OpenXR之monado吐槽

2022年接触VR开发,想到VR的通用接口,首选OpenXR,看了很多文章,下载了很多开源代码

其中最著名的是OpenXR的monado实现,之所以要研究他,因为有开发任务在身

第一个开发任务是需要把usb摄像头,imu接入monado进行6DOF的算法测试

摄像头使用v4l2协议接入,通过看monado的代码,里面搞了很多c语言写的函数指针,想必是想用c的代码来实现c++吧,这么搞实在没有必要,回调函数很多,而且相互之间的逻辑混乱。monado里面有v4l2的驱动,但是仅仅是系统启动的时候用于搜索,搜索得到的结果,如果在实际的驱动中用起来很不方便,最终我写死了v4l2视频的文件地址,完成了这个测试,完成之后其实我自己并不满意,摄像头+imu目的是输出一个6DOF的数据,这个数据在测试例子中是给头显用的,达不到可以灵活部署到手柄的6DOF定位的效果。

第二个开发任务是在写steamvr的驱动时遇到了困难了,一般会想到去看monado的驱动实现,从中提取有用的信息,关于FOV的处理,monado中的实现比较清楚,但也没有完全搞懂,把这部分移植到steamvr的驱动中后,头显的2个view视角差出来了,播放3D视频或者运行steamvr游戏,有了更清晰的体验感。

后来就是自己想研究搞懂monado,然后就精简不必要的驱动,聚焦整个系统框架的理解。

看了他的大部分驱动,基本上使用HID通信来完成数据的设备比较多,也有使用蓝牙的。

对于厂商来说,要支持OpenXR,意味着要将自己的设备驱动写进OpenXR运行时,这个东西虽然是开源,但是厂商不一定愿意将自己设备的源代码开放出去,加上厂商多了以后,代码会越来越复杂。维护成本可能比只维护steamvr的驱动还要高。

还有一个问题,目前还不能把monado编译在windows下运行,也就没法通过steamvr来测试OpenXR

对于这么复杂的东西,现在仅仅限于开发任务解决,熟悉其原理,把对应的流程全部搞懂就好办了。

你可能感兴趣的:(vr)