在和老师讨论之后,决定来使用HTC Vive实现图像拼接以及观看全景图的效果;
1. 了解基本情况
HTC公司和Valve公司合作,借用SteamVR平台(目前最大的VR游戏平台),打造的HTC Vive头盔。
2. 查找开源代码以便进行下一步的学习
- 在查找源码的过程中出现好多问题,有的已经解决,有的还未解决;
- 目前已有三个VR操作系统:Oculus OS,Valve's openVR和OSVR;我选择了openVR。
- 我找到了一版基于Unreal的HTC Vive示例代码,我本人是使用Visual Studio编写代码的,不知道Unreal,Unity和Visual Studio的关系是什么,是平行取代关系,还是都被需要;我觉得是平行取代的关系,因为在我看openVR的代码的时候,它使用openGL来提供图形接口的,说白了就是游戏界面;所以此三个软件平台是可替代关系;
3. 源码学习
- 在gitHub上找到了openVR的源码,开始学习;
- 源码是使用C#写的,纵观源码,共有lodepng.cpp Matrices.cpp pathtools.cpp hellovr_opengl_main.cpp四个程序,主要学习了main函数代码内容(共2000行左右);
残留的问题有:
- SDL和openGL的关系是什么呢?//此问题已解决;
openGL提供图形接口,当前主流的图形API之一,高性能的图形渲染;
- position为何使用4*4的矩阵,和深层次的内核有关吗?
- SDL_event和VR_event的区别?
- 代码中device和controller的区别?
我理解的是device代表头盔,controller代表手柄;
4.结合所学内容
考虑把图像拼接的代码加到什么地方,还有生成的全景图再哪个地方呈现;
分析除了main函数所在cpp之外的程序,Matrices.cpp提供了矩阵的定义和使用函数,pathtools.cpp提供了路径的获取和相关操作,loadpng.cpp是图像的相关操作(包括decoder等)这个cpp的作用目前不知道,在main函数里面没有被调用到,程序开头的注释写的是以供参考使用。所以需要修改到的应该是
pathtools.cpp和hellovr_opengl_main.cpp。
****9.18更新
1. 今天在细致查阅openVR的代码的时候,发现之前看的openGL_sample工程只是其中的一小部分,还有其他几个工程包括:QT(tracked_camera和overlay),unity(keyboard和teleport),应该是示例在QT和unity里面的用法,还有driver_sample,不知道它和opengl_sample的区别;
2. 解决一个问题,driver_sample和openGL_sample都是C++代码而不是C#,所以不用管C++与C#之间的转换;
3. 发现一个问题:在VR设备通信中,driver host client的关系是什么?
发现并解决一个问题,应用程序和驱动程序的区别: 驱动程序告诉系统计算机内有这么一个硬件API则是告诉系统有应用程序 需要调用硬件 系统在通过驱动程序找到这个需要调用的硬件给应用程序使用; 因此需要学习的代码是openGL_sample工程;