openGL连接vive头盔

7 篇文章 4 订阅

1 openVR

openVR这个三方库要将其用在自己的openGL渲染程序中,其实就是做个左右眼的两个渲染场景,后面会显示在vive头盔的左右显示器中,大概做的工作就是把之前的工作任务复制三份,其中一份是为了自己不在头盔中运行的时候能够显示出来,可以用来调试代码,

1 整体框架主要是三部分:

(1)创建vr,启动vr

//创建vr
	VRDriver * vrdriver;
	if (hasVR)
	{
		vrdriver = new VRDriver();

	}
	//========================
	//启动vr
	if (hasVR)
	{
		if (!vrdriver->Init())
		{
			cout << "failed to init VR" << endl;
		}
		windowWidth = vrdriver->m_nRenderWidth;
		windowHeight = vrdriver->m_nRenderHeight;
	}
	else
	{
		windowWidth = WINDOW_WIDTH;
		windowHeight = WINDOW_HEIGHT;
	}

(2)左右眼渲染程序:
在这里插入图片描述

(3)提交

	glDisable(GL_BLEND);
			vrdriver->VREnd(false);
			vrdriver->Submit();
			glBindFramebuffer(GL_FRAMEBUFFER, 0);

当然其中还有一些细节,可以完全模仿别人的程序进行完全的替换;

2 openVR资料介绍和库的下载

openVR介绍
https://partner.steamgames.com/doc/features/steamvr/openvr
openVR库下载的地方
https://github.com/ValveSoftware/openvr

2 配置VR头盔硬件

硬件部分的任务有两个:安装空间定位器和将头盔和电脑连接,把这两个步骤做完后进行检验是否正确的的步骤就是看其状态指示灯是否是绿色,有一个不是绿色都有故障;
在这里插入图片描述

1 安装空间定位器

  1. 确保与另一个定位器之间视线不受阻挡。每个定位器的视场为 120 度。应当将其向下倾斜30 到 45 度。要固定定位器的角度,请拧紧夹紧环。
  2. 为每个定位器接上电源线,然后分别插入电源插座以开启电源。状态指示灯应显示绿色。
  3. 连接定位器并设置频道。(PS:请勿在定位器开启后移动位置或调整角度,可能会中断追踪过程。)
    在这里插入图片描述

2 将头盔和电脑连接

如下图,

在这里插入图片描述
在连接的时候碰到了一个问题
SteamVR提示 “头戴显示器未连接正确”(故障 208)
在这里插入图片描述
这个问题最后是因为自己将PB线连接到了另外一个PB接口,应该连到显卡的pb接口上;不知道显卡的pb接口那就百度一下,这个要注意

2 steam VR的操作

1 安装steam

https://store.steampowered.com/
在这里插入图片描述

2 安装steam vr

在这里插入图片描述

3 打开steam vr

在这里插入图片描述

  1. 要是前面都没有问题的话,打开steam vr会直接出现下面这样子的
    在这里插入图片描述
  2. 进行运行房间设置
    在这里插入图片描述
    进入下面这个界面:
    在这里插入图片描述
    点击下一步:
    接下来可以参考下面的步骤进行接下来的匹配
    https://www.jianshu.com/p/965badfdce58
    在这里插入图片描述
    【显示器映射】如下:
    作用就是在OpenGL程序启动后可以在这个视图中显示
    在这里插入图片描述

3 OpenGL和vive的连接

上面的都搞定了,其实只要头盔不报错,上面的openvr代码框架没有错,你就放心大胆的点击下面的这个地方吧,你就可以实现自己openGL和vive头盔的连接;

在这里插入图片描述

3 总结

总的来说,这个过程没有什么难度,首先要相信自己,遇到问题了问别人,网上查吗,问题都是可以解决的;
整个过程,建议采取以下步骤:

  1. 首先将你的openvr的驱动和框架部署到你的OpenGL程序中
  2. 然后将头盔连接到你的pc,保证你的pc有相应的接口,比如我的电脑没有pd和hdmi接口,导致换了台电脑;
  3. 然后安装steam vr
  4. 最后安装空间定位器,因为在实验室地方太小,这个定位器放自己旁边会导致自己的空间变小,所以建议放最后

5 下图这个问题是由于什么导致的呢?

在这里插入图片描述

目前主要解决的是这个问题,这问题解决了,接下来要解决的是手柄按钮的问题;这个问题解决了那就是自己在正常渲染中的功能在vr中实现了;

目前已经解决了:
原因如下:

if (hasVR)
	{
		if (!vrdriver->Init())
		{
			cout << "failed to init VR" << endl;
		}
		windowWidth = vrdriver->m_nRenderWidth;
		windowHeight = vrdriver->m_nRenderHeight;
	}
	else
	{
		windowWidth = WINDOW_WIDTH;
		windowHeight = WINDOW_HEIGHT;
	}

这段代码的意思就是使用vr头盔的时候,显示的宽度和高度是vrdriver->m_nRenderWidth和vrdriver->m_nRenderHeight;这个逻辑没有问题,但是在后面所有的代码,我在修改代码的时候忘了将WINDOW_WIDTH和WINDOW_HEIGHT修改成windowWidth以及windowHeight;这个导致在头盔中还是使用PC端的windowWidth和windowHeight;

参考文献

[1]. https://www.jianshu.com/p/965badfdce58
[2] http://news.4399.com/vr/jiaocheng/v/m/697170.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值