一种将普通3D程序转换成VR/XR扩展现实程序的方法与流程

未命名 07-20 阅读:120 评论:0

一种将普通3d程序转换成vr/xr扩展现实程序的方法
技术领域
1.本发明涉及一种3d程序的转换方法,具体涉及一种将普通3d程序转换成vr/xr扩展现实程序的方法。


背景技术:

2.vr是虚拟现实,通常使用沉浸式虚拟现实头盔观看沉浸式的虚拟现实内容。虚拟显示内容有两种,第一种是720度视场角的图像视频内容,这种内容通常是通过包裹在一个球形网格模型上,观察者的视点落在球心位置,观察者转动头部,在头盔内就会看到不同视角的画面。第二种是通过虚拟摄像机动态生成场景内容,六自由度传感器会将观察者头部位姿信息传递给虚拟摄像机,虚拟摄像机渲染该位姿下的3d场景并在头盔内观看到该视角的虚拟图像。
3.xr是扩展现实,通常是用沉浸式led环境呈现出虚拟场景,人可以不用佩戴头盔就能够获得身临其境的感觉,其内容生产方式与vr类似,一种是720度影片,一种是根据观察者的视点动态生成虚拟场景。在第二种方法中,通常是利用视点跟踪和视点透视矫正的方法对虚拟场景进行投影,以获得最佳观看效果。
4.vr/xr程序都需要开发人员使用专用的sdk(软件开发工具包)开发,不同的头盔,不同显示形状的led都会对应不同的sdk或者不同的sdk设置,难以普及。
5.目前大部分的3d程序(3d游戏、虚拟仿真软件、3d互动展示软件)都不能直接在vr/xr设备上运行,其中关键的原因在于3d程序中的虚拟摄像机的视场角通常只有一个,视场角在120度以内,不能提供360视场角,而且这些3d程序不能够完成视点跟踪和透视矫正,所以画面即使显示在vr/xr设备上,也是扭曲变形的。


技术实现要素:

6.针对目前开发vr/xr 3d应用程序只能使用专用sdk进行开发的问题,本发明提供了一种将普通3d程序转换成vr/xr扩展现实程序的方法。该方法能够将已经编译好的3d图形类型的可执行app文件转换成具有720度视场角(水平360度垂直360度)的互动3d场景程序,可用于跟虚拟现实领域相关的虚拟仿真程序应用开发,使开发人员无需考虑终端设备的类型(头盔vr、xr),能够在终端设备中直接运行并呈现出沉浸式的显示效果。
7.本发明的目的是通过以下技术方案实现的:
8.一种将普通3d程序转换成vr/xr扩展现实程序的方法,包括如下步骤:
9.步骤1、检测目标3d应用程序的类型;
10.步骤2、通过修改器方法,获取3d应用程序中存储虚拟摄像机的内存地址,并解析摄像机对象类型,使用c++或者c#将内存地址表转换成可以操作的虚拟摄像机对象物体,通过内存地址的指针访问虚拟摄像机的参数;
11.步骤3、在每一次渲染的循环函数中,操作虚拟摄像机,设定其视场角为90度,分别朝向量方向(1,0,0)、(-1,0,0)、(0,0,1)、(0,0,-1)、(0,1,0)和(0,-1,0)进行场景渲染,其
渲染图像分别是r1、r2、r3、r4、r5、r6;
12.步骤4、利用c++或者c#建立一个新的虚拟摄像机,给其绑定一个cg/hlsl/glsl材质程序,将r1、r2、r3、r4、r5、r6根据用户的视点位姿参数,渲染到vr或者xr设备特定的显示缓冲区,并完成透视矫正;
13.步骤5、将原3d应用程序的指令操作通过键盘映射映射到vr/xr的交互手柄上,实现对虚拟场景的交互操作;
14.步骤6、将程序编译成动态链接库文件,使用动态链接库注入程序实现vr/xr场景的渲染。
15.相比于现有技术,本发明具有如下优点:
16.1、3d应用程序在编译好以后,里面的虚拟相机以及虚拟相机的数量已经被程序固化,无法调整其视角以及3d场景渲染的方式。而本发明则可以通过动态链接库注入的方式,在显示芯片层面对虚拟相机进行操作,调整虚拟相机的视场角和数量,并根据终端设备的类型完成视点跟踪和透视矫正,使设备上呈现出沉浸的vr画面,从而实现普通3d应用程序转化成vr/xr程序。
17.2、利用本发明转换方法开发的播放器,能够将已经编译好的3d程序(exe apk app)直接在vr/xr设备上运行,并且还原其720度的观察画面。通过此技术,可以将已有的大量3d应用直接转换成vr/xr应用。
18.3、本发明的转换方法可以将普通3d图形程序如游戏、虚拟仿真应用都直接转换成vr/xr应用程序;分辨率比原有3d图形程序更大,交互性和沉浸性更强;无需要考虑终端设备的类型,能够基于当前设备情况完成自动适配。
附图说明
19.图1为转换前的3d游戏画面;
20.图2为转换后在xr中的3d游戏画面;
21.图3为修改器加载器的类实现。
具体实施方式
22.下面结合附图对本发明的技术方案作进一步的说明,但并不局限于此,凡是对本发明技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,均应涵盖在本发明的保护范围中。
23.本发明提供了一种将普通3d程序转换成vr/xr扩展现实程序的方法,所述方法包括如下步骤:
24.1、检测目标3d应用程序的类型:3d应用程序分成3大类:unity引擎开发、unreal engine开发以及其他使用图形api(directx opengl),根据不同3d应用程序会使用不同的应用程序api接口方法。
25.2、通过修改器方法,获取3d应用程序中存储虚拟摄像机的内存地址,并解析摄像机对象类型,使用c++或者c#将内存地址表转换成可以操作的虚拟摄像机对象物体。这样,就可以通过内存地址的指针访问虚拟摄像机的参数。
26.3、在每一次渲染的循环函数中,操作虚拟摄像机,设定其视场角为90度,分别朝向
量方向(1,0,0)、(-1,0,0)、(0,0,1)、(0,0,-1)、(0,1,0)和(0,-1,0)进行场景渲染,其渲染图像分别是r1、r2、r3、r4、r5、r6;
27.4、利用c++或者c#建立一个新的虚拟摄像机,给其绑定一个cg/hlsl/glsl材质程序,该cg材质程序的作用是将r1、r2、r3、r4、r5、r6根据用户的视点位姿参数,渲染到vr或者xr设备特定的显示缓冲区,并完成透视矫正;
28.5、将原3d应用程序的指令操作通过键盘映射如wm_message映射到vr/xr的交互手柄上,实现对虚拟场景的交互操作。
29.6、如果3d应用程序存在鼠标操作,那么则需要将鼠标的输入信息转换成基于视点位置的视线信息,映射到vr/xr的交互手柄上,实现虚拟鼠标操作。
30.7、将程序编译成动态链接库文件,使用动态链接库注入程序实现vr/xr场景的渲染。
31.实施例:
32.以unity的3d游戏为例,此例子针对mono方式编译的3d程序,具体转换方法如下:
33.1、选择unity 3d游戏,查看其版本信息;
34.2、选取其中一个游戏修改器工具,如sharpmonoinjector;
35.3、新建一个c#的.net动态链接库工程文件,起名字叫testmod;
36.4、按照sharpmonoinjector的方法建立模板工程,引用3d游戏程序的动态链接库如unityengine.dll;
37.5、新建一个类,此类为loader,用于加载cg材质程序和相关渲染程序,如图3所示;
38.6、新建一个unity的类名字为hack,此类继承monobehavior,并在此类中使用loadassetbundle方法从外部加载cg材质程序;
39.7、在hack类的更新函数中,获取当前的主虚拟摄像机,沿着分别朝向量方向(1,0,0)、(-1,0,0)、(0,0,1)、(0,0,-1)、(0,1,0)和(0,-1,0)进行场景渲染,其渲染图像分别是r1、r2、r3、r4、r5、r6;
40.8、将r1、r2、r3、r4、r5、r6图像传递给cg材质程序,完成视点跟踪和透视矫正,输出到vr/xr设备中。
41.9、将程序编译成动态链接库文件,使用动态链接库注入程序实现vr/xr场景的渲染。
42.转换前的3d游戏画面如图1所示,转换后在xr中的画面如图2所示。由图2可以看出,视角画面已经变得更大了。

技术特征:
1.一种将普通3d程序转换成vr/xr扩展现实程序的方法,其特征在于所述方法包括如下步骤:步骤1、检测目标3d应用程序的类型;步骤2、通过修改器方法,获取3d应用程序中存储虚拟摄像机的内存地址,并解析摄像机对象类型,使用c++或者c#将内存地址表转换成可以操作的虚拟摄像机对象物体,通过内存地址的指针访问虚拟摄像机的参数;步骤3、在每一次渲染的循环函数中,操作虚拟摄像机,设定其视场角为90度,分别朝向量方向(1,0,0)、(-1,0,0)、(0,0,1)、(0,0,-1)、(0,1,0)和(0,-1,0)进行场景渲染,其渲染图像分别是r1、r2、r3、r4、r5、r6;步骤4、利用c++或者c#建立一个新的虚拟摄像机,给其绑定一个cg/hlsl/glsl材质程序,将r1、r2、r3、r4、r5、r6根据用户的视点位姿参数,渲染到vr或者xr设备特定的显示缓冲区,并完成透视矫正;步骤5、将原3d应用程序的指令操作通过键盘映射映射到vr/xr的交互手柄上,实现对虚拟场景的交互操作;步骤6、将程序编译成动态链接库文件,使用动态链接库注入程序实现vr/xr场景的渲染。2.根据权利要求1所述的将普通3d程序转换成vr/xr扩展现实程序的方法,其特征在于所述3d应用程序分成3大类:unity引擎开发、unrealengine开发以及使用图形api。3.根据权利要求1所述的将普通3d程序转换成vr/xr扩展现实程序的方法,其特征在于所述3d应用程序若存在鼠标操作,则需要将鼠标的输入信息转换成基于视点位置的视线信息,映射到vr/xr的交互手柄上,实现虚拟鼠标操作。

技术总结
本发明公开了一种将普通3D程序转换成VR/XR扩展现实程序的方法,所述方法如下:1、检测目标3D应用程序的类型;2、获取3D应用程序中存储虚拟摄像机的内存地址,将内存地址表转换成虚拟摄像机对象物体;3、在每一次渲染的循环函数中,操作虚拟摄像机进行场景渲染;4、建立一个新的虚拟摄像机,给其绑定材质程序,将渲染图像渲染到VR或者XR设备特定的显示缓冲区,并完成透视矫正;5、将原3D应用程序的指令操作映射到VR/XR的交互手柄上,实现对虚拟场景的交互操作;6、将程序编译成动态链接库文件,使用动态链接库注入程序实现VR/XR场景的渲染。该方法可以将普通3D图形程序直接转换成VR/XR应用程序。用程序。用程序。


技术研发人员:欧剑
受保护的技术使用者:欧剑
技术研发日:2023.03.17
技术公布日:2023/7/18
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐