CN108573505B - 虚拟视场合理性检测的方法及其系统、存储介质 - Google Patents
虚拟视场合理性检测的方法及其系统、存储介质 Download PDFInfo
- Publication number
- CN108573505B CN108573505B CN201810462485.4A CN201810462485A CN108573505B CN 108573505 B CN108573505 B CN 108573505B CN 201810462485 A CN201810462485 A CN 201810462485A CN 108573505 B CN108573505 B CN 108573505B
- Authority
- CN
- China
- Prior art keywords
- virtual
- detection
- camera
- field
- field angle
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/70—Determining position or orientation of objects or cameras
Landscapes
- Engineering & Computer Science (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Processing Or Creating Images (AREA)
Abstract
本发明提供一种虚拟视场合理性检测的方法及其系统、存储介质,方法包括:依据当前连接的显示设备的设备名称信息查询预设的设备信息配置表,获取所述显示设备的视场角;获取当前虚拟场景中虚拟摄像机的视场角;依据所述显示设备的视场角与所述虚拟摄像机的视场角的比值输出检测结果。本发明不仅能够实现全自动化、高效率、准确地检测获取虚拟视场合理性结果,为虚拟视场的调整与否提供准确的依据;而且采用远程通信的方式实现,不再需要依赖源代码,降低了检测难度以及人力资源、时间成本的投入;进一步的,全自动处理方式,在弥补这块测试空白的同时,也解决了测试流程完整性的问题,同时提高了检测精确度。
Description
技术领域
本发明涉及虚拟显示领域,具体说的是一种基于引擎的虚拟视场合理性检测的方法及其系统、存储介质。
背景技术
随着虚拟现实技术的发展,越来越多的虚拟现实软件出现在人们的生活中。作为虚拟现实软件,沉浸感一直是用户体验的核心。制约用户体验的因素很多,其中就包含了虚拟视场的不合理设定(虚拟视场包括了虚拟现实软件的虚拟摄像机视场和虚拟现实软件的头盔显示器的视场,两者共同组成了虚拟现实软件的虚拟视场)。虚拟视场可以理解为用户在体验虚拟现实软件时,所能看到的视野范围,视场角越大,则用户的视野范围越广,反之,则用户的视野范围越小。
现实世界和虚拟视场需要相互协调。通常来说,用户在体验虚拟现实时,是看不到真实世界的,虚拟世界充满了你的视野的绝大部分,并且保证了只有头部运动才会产生虚拟世界的反馈。因此,使虚拟现实软件中的虚拟摄像机视场和虚拟现实头盔显示器的视场相互协调显得尤为重要。这两个值之间存在一个比值,而在虚拟显示中,这个比值需要恒为1。虚拟摄像机视场和虚拟现实头盔显示器的视场之间的偏差会造成人体的不适。场景的比例和现实不相应,头部运动和眼部运动不一致,并且目前市场上流行的虚拟现实头盔显示设备默认的图像变形将导致渲染场景扭曲,这些都将导致晕动症的发生并且导致前庭眼的反射不良。
因此,虚拟现实软件中虚拟摄像机视场角和虚拟现实头盔显示器的视场角是否能够保持一致直接决定了该虚拟现实软件用户体验的舒适度。
在Unity3D引擎中,Camera类提供了用于设置虚拟摄像机视场角的方法函数,这个方法函数就是fieldOfView。开发者在开发虚拟现实软件的时候可以根据所连接设备通过fieldOfView方法函数对虚拟摄像机的视场角进行动态的设置,以保持虚拟摄像机的视场角和所连接的虚拟现实头盔显示设备的视场角保持一致。但是,在实际项目中,开发人员经常忽略了虚拟视场角的设置,或者是设置的虚拟视场角大小与预期需要连接的虚拟现实头盔显示设备的视场角没有保持一致,这样就导致了用户在体验软件的舒适度大幅度降低。
而目前虚拟现实软件检测领域缺少一种用于检测软件的虚拟视场合理性的方法(即检测软件的虚拟视场角和虚拟现实头盔显示器的视场角的比值)。检测人员如果想要对虚拟摄像机进行检测就必须阅读开发人员的项目源代码,这样对于检测人员的代码阅读能力就有了较高的要求。目前,一般的检测人员很难达到这样的水准。其次,即使检测人员能够阅读开发人员的源代码,这样的检测方式也是很消耗人力资源的。对于一个完整的检测流程而言,检测人员不仅要对检测数据进行采集、校验、分析,还需要对检测数据进行存储以及检测报表的编写,这样才是一个完整的检测流程。
出于该原因,有必要提供了一种能够自动计算软件虚拟视场角并验证虚拟视场角和虚拟现实软件头盔显示器的视场角比值的方法,以解决当前虚拟现实软件中可能存在的虚拟视场的角度不一致导致的体验问题,改善用户体验。
发明内容
本发明所要解决的技术问题是:提供一种虚拟视场合理性检测的方法及其系统、存储介质,无需阅读源代码,能够全自动、高效地对虚拟视场的合理性进行准确的检测。
为了解决上述技术问题,本发明采用的技术方案为:
一种虚拟视场合理性检测的方法,包括:
依据当前连接的显示设备的设备名称信息查询预设的设备信息配置表,获取所述显示设备的视场角;
获取当前虚拟场景中虚拟摄像机的视场角;
依据所述显示设备的视场角与所述虚拟摄像机的视场角的比值输出检测结果。
本发明提供的第二个技术方案为:
一种虚拟视场合理性检测的系统,包括虚拟现实软件和检测框架;所述虚拟现实软件上挂载有一检测程序和一服务端;
所述一服务端与所述检测框架上的客户端之间通过Socket建立通信连接关系;所述服务端依据所述客户端发送过来的检测指令,调用所述检测程序,执行上述一种虚拟视场合理性检测的方法所包含的所有步骤。
本发明提供的第三个技术方案为:
一种计算机可读存储介质,其上存储有计算机程序,所述程序在被处理器执行时实现上述一种虚拟视场合理性检测的方法所包含的步骤。
本发明的有益效果在于:本发明通过预设尽可能包含市面上所有虚拟现实显示设备的设备名称及其视场角之间对应关系的设备信息配置表,能够实现通过对配置表的查询,自动、快速地获取当前与虚拟现实软件连接的显示设备的视场角信息;在获取当前虚拟场景中虚拟摄像机的视场角后,自动计算二者的比值关系,并据此输出检测结果,实现虚拟视场角合理性的全自动采集、校验和分析,获取准确的检测结果,无需再人为翻阅源代码耗费过多的时间和精力来实现检测目的。本发明能够以全自动化的计算分析方式来显著提高对虚拟视场合理性检测的效率和准确率,为适时调整产品的虚拟视场参数提供技术支持,以改善用户体验,提高用户感受虚拟现实场景的舒适度,获取良好的沉浸感。
附图说明
图1为本发明一种虚拟视场合理性检测的方法的流程示意图;
图2为本发明实施例一中计算获取当前虚拟场景中虚拟摄像机的视场角的流程示意图;
图3为本发明实施例二的虚拟视场合理性检测的方法的流程示意图;
图4为计算方法的虚拟摄像机视场示意图;
图5为本发明实施例二的Socket通信原理图;
图6为本发明实施例二中计算获取虚拟摄像机的视场角信息的流程示意图。
具体实施方式
为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。
本发明最关键的构思在于:通过对预设的设备信息配置表的查询,自动、快速地获取当前连接的显示设备的视场角信息;在获取当前虚拟场景中虚拟摄像机的视场角后,自动计算二者的比值关系,并据此输出检测结果,实现虚拟视场角合理性的全自动采集、校验和分析,获取准确的检测结果。
本发明涉及的技术术语解释:
请参照图1,本发明提供一种虚拟视场合理性检测的方法,包括:
依据当前连接的显示设备的设备名称信息查询预设的设备信息配置表,获取所述显示设备的视场角;
获取当前虚拟场景中虚拟摄像机的视场角;
依据所述显示设备的视场角与所述虚拟摄像机的视场角的比值输出检测结果。
从上述描述可知,本发明的有益效果在于:本发明能够以全自动化的计算分析方式来显著提高对虚拟视场合理性检测的效率和准确率,为适时调整产品的虚拟视场参数提供技术支持,以改善用户体验,提高用户感受虚拟现实场景的舒适度,获取良好的沉浸感。
进一步的,所述获取当前虚拟场景中虚拟摄像机的视场角,具体为:
通过调用开发引擎提供的获取摄像机视场角接口获取当前虚拟场景中虚拟摄像机的视场角。
由上述描述可知,在开发引擎能提供摄像机视场角接口函数的情况下,能够通过调用接口函数快速获取虚拟摄像机的视场角,提高检测效率。
进一步的,所述获取当前虚拟场景中虚拟摄像机的视场角,具体为:
创建一个摄像机对象,并初始化所述摄像机对象的三维坐标;
加载一个球体对象,并初始化所述球体对象的三维坐标;
锁定所述摄像机对象的视野在所述球体对象的初始三维坐标上;
在逐帧更新渲染时,沿着垂直轴方向上移球体对象,并在当前帧结束前判断其是否处于所述摄像机对象的视场范围内;若是,则结束当前帧的渲染,继续下一帧的渲染;
若否,则获取球体对象当前的三维坐标、渲染画面的宽高比;依据所述球体对象当前的三维坐标、渲染画面的宽高比以及摄像机对象的三维坐标计算得到当前虚拟场景中虚拟摄像机的水平视场角。
由上述描述可知,在引擎不支持通过接口调用快速获取摄像机视场角的情况下,同样能通过计算,快速获取准确的摄像机视场角,保证检测的顺利进行。
进一步的,所述依据所述球体对象当前的三维坐标、渲染画面的宽高比以及摄像机对象的三维坐标计算得到当前摄像机对象的水平视场角,具体为:
依据渲染画面的宽高比以及所述球体对象当前的三维坐标中的Y坐标值计算获取视椎体截面的宽度;
依据所述球体对象当前的三维坐标和摄像机对象的三维坐标计算得到摄像机对象与球体对象当前位置之间的距离;
依据所述宽度和所述距离计算获取当前摄像机对象的水平视场角。
由上述描述可知,基于摄像机对象与视椎体构成的立体图形的数学原理,计算得到当前摄像机水平视场角,保证计算结果的准确性,同时实现方式简便。
进一步的,还包括:
虚拟现实软件启动时创建服务端Socket;
服务端Socket接收客户端Socket发来的连接请求,并与客户端建立通信连接;
服务端在接收到客户端发来的检测指令后,执行所述获取所述显示设备的视场角的步骤。
由上述描述可知,基于C/S结构设计模式,通过Socket通信的方式,实现检测框架与虚拟现实软件间的远程通信交互,由此解决检测人员需要依赖项目源代码才能实现检测的问题,同时还实现了全自动化检测过程,显著提高检测效率和检测准确度。
进一步的,所述依据所述显示设备的视场角与所述虚拟摄像机的视场角的比值输出检测结果,具体为:
若无法从预设的设备信息配置表中获取所述显示设备的视场角,或所述显示设备的视场角与所述虚拟摄像机的视场角的比值不为1;则输出检测不通过的检测数据至服务端;
若所述显示设备的视场角与所述虚拟摄像机的视场角的比值为1,则输出检测通过的检测数据至服务端;
服务端返回所述检测数据至客户端;
客户端解析所述检测数据,生成检测结果。
由上述描述可知,能够在虚拟现实软件中实现全自动检测过程,并将检测数据远程传输至客户端,由客户端解析生成检测结果,以此实现检测的全自动化,并获取易读的检测结果,显著降低对检测人员的专业要求,能够大大简化投入检测工作的人力资源。
进一步的,还包括:
申明全局变量fov_h,用于存储虚拟现实显示设备的视场角;
申明全局变量equ_Name,用于存储显示设备的设备名称信息;
申明全局变量vir_Fov,用于存储虚拟摄像机的视场角;
申明全局变量is_pass,用于表示当前检测是否通过。
由上述描述可知,申明用于存储相关数据的载体,以配合全自动检测流程的实现,同时有利于简化本发明实现全自动所涉及的流程。
进一步的,在获取所述显示设备的视场角后,将所述显示设备的视场角赋值给全局变量fov_h;
在获取当前虚拟场景中虚拟摄像机的视场角后,将所述虚拟摄像机的视场角赋值给全局变量vir_Fov;
依据所述全局变量fov_h与全局变量vir_Fov的比值计算结果输出检测结果;
若所述比值计算结果不等于1,则将所述设备名称信息赋值给全局变量equ_Name,并将全局变量is_pass的值赋值为false;
若所述比值计算结果等于1,则将所述设备名称信息赋值给全局变量equ_Name,并将全局变量is_pass的值赋值为true;
输出包括所述全局变量equ_Name和全局变量is_pass的检测结果。
由上述描述可知,能够直接基于全局变量进行分析和计算,大大简化所需涉及的数据处理量,同时提高分析和计算的准确率。
本发明提供的第二个技术方案为:
一种计算机可读存储介质,其上存储有计算机程序,所述程序在被处理器执行时实现上述一种虚拟视场合理性检测的方法所包含的步骤。
从上述描述可知,本发明的有益效果在于:对应本领域普通技术人员可以理解实现上述技术方案中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来实现的,所述的程序可存储于一计算机可读取的存储介质中,该程序在执行时,可包括如上述各方法的流程。
本发明提供的第三个技术方案为:
一种虚拟视场合理性检测的系统,包括虚拟现实软件和检测框架;所述虚拟现实软件上挂载有一检测程序和一服务端;
所述一服务端与所述检测框架上的客户端之间通过Socket建立通信连接关系;所述服务端依据所述客户端发送过来的检测指令,调用所述检测程序,执行上述一种虚拟视场合理性检测的方法中除服务端和客户端所实现的步骤以外的所有步骤。
从上述描述可知,本检测系统采用C/S结构设计模式,通过Socket通信的方式,实现了通过检测框架与虚拟现实软件间的远程数据交互,对虚拟现实软件的虚拟视场合理性的全自动数据采集、分析和处理,获取直观、准确的检测结果。
实施例一
请参照图1、图2以及图4,本实施例提供一种虚拟视场合理性检测的方法,包括:
虚拟现实软件在接收到虚拟视场合理性检测的指令后,自动调用检测程序执行以下步骤。其中,所述指令可以由外部设备发起,也可以通过设定,由虚拟现实软件的载体应用终端自主触发。
所述步骤包括:
S1:依据当前连接的显示设备的设备名称信息查询预设的设备信息配置表,获取所述显示设备的视场角;
具体的,可以预先编写设备信息配置表存放在虚拟现实软件中,所述设备信息配置表可以理解为将目前市面上的虚拟现实显示设备的基础设备信息(包括设备名称、生产商、屏幕分辨率等信息)及其对应的视场角都录入其中,用于后续依据设备信息从配置表中检索,获取该显示设备对应的视场角信息。
S2:获取当前虚拟场景中虚拟摄像机的视场角;
具体的,至少可以通过两种方式获取虚拟摄像机的视场角。第一种方式为:在引擎中有提供用于提取当前虚拟摄像机视场角的接口函数的情况下,直接通过调用该接口函数获取摄像机视场角;第二种方式为:在引擎中没有提供上述接口函数的情况下,通过简便、高效的计算方式计算获取当前虚拟场景中虚拟摄像机的视场角;这种方式适用于任何的开发引擎,以保证虚拟摄像机视场角的获取。
针对上述第二种方式,是基于图4的虚拟摄像机视场图示中的摄像机对象与视椎体构成的立体图形的数学原理实现,如图2所示,可以通过下述步骤实现:
S21:创建一个摄像机对象,并初始化所述摄像机对象的三维坐标;
S22:加载一个球体对象,并初始化所述球体对象的三维坐标;
S23:锁定所述摄像机对象的视野在所述球体对象的初始三维坐标上;
S24:在逐帧更新渲染时,沿着垂直轴方向上移球体对象,并在当前帧结束前判断其是否处于所述摄像机对象的视场范围内;若是,则结束当前帧的渲染,继续下一帧的渲染;
若否,则获取球体对象当前的三维坐标、渲染画面的宽高比;依据所述球体对象当前的三维坐标、渲染画面的宽高比以及摄像机对象的三维坐标计算得到当前虚拟场景中虚拟摄像机的水平视场角。
在一具体运用场景中,步骤S24中的所述依据所述球体对象当前的三维坐标、渲染画面的宽高比以及摄像机对象的三维坐标计算得到当前摄像机对象的水平视场角,具体为:
依据渲染画面的宽高比以及所述球体对象当前的三维坐标中的Y坐标值计算获取视椎体截面的宽度;
依据所述球体对象当前的三维坐标和摄像机对象的三维坐标计算得到摄像机对象与球体对象当前位置之间的距离;
依据所述宽度和所述距离计算获取当前摄像机对象的水平视场角。
S3:依据所述显示设备的视场角与所述虚拟摄像机的视场角的比值输出检测结果。
在已经获取了显示设备的视场角和虚拟摄像机的视场角后,能够自动计算二者的比值,以此确定该比值是否符合虚拟视场的合理性要求,并输出直观的检测结果供检测人员参考是否对虚拟视场做进一步的调整。
具体的,若无法从预设的设备信息配置表中获取所述显示设备的视场角,或所述显示设备的视场角与所述虚拟摄像机的视场角的比值不为1;则输出检测不通过的检测结果;
若所述显示设备的视场角与所述虚拟摄像机的视场角的比值为1,则输出检测通过的检测结果。
实施例二
请参照图3至图6,本实施例在实施例一的基础上,对其做进一步的扩展和细化,提供一种基于C/S结构进行设计,通过检测框架与虚拟现实软件之间的远程通信交互,实现对虚拟现实软件的虚拟视场合理性检测的方法。
本实施例的方法基于虚拟视场合理性检测系统实现,如图3所示,检测系统包括虚拟现实软件和检测框架;所述虚拟现实软件上通过挂载的方式集成有一检测程序和一服务端;所述检测框架上承载有一客户端;虚拟现实软件通过其上的服务端与检测框架的客户端之间建立socket通信连接实现二者的远程通信。
具体的,本实施例的方法包括以下流程:
一、检测框架与虚拟现实软件之间的远程通信关系的建立。
如图5Socket通信原理图所示,包括:
虚拟现实软件启动时,创建服务端Socket。具体的,通过挂载的脚本组件分别调用socket()创建TCP套接口,bind()绑定地址和端口,listen()转换主动套接口为被动套接口完成初始化服务端,并阻塞等待客户端的连接请求。
在检测框架创建客户端socket,通过服务器的ip地址和端口号,调用connect()向服务端发送连接请求,并阻塞等待服务器应答。
服务端socket接收到上述的连接请求后,回复应答并阻塞等待客户端的请求数据,客户端同样回复一个连接成功的应答,此时客户端和服务器建立通信连接。
二、检测指令的发送和处理。
完成检测框架与虚拟现实软件之间的通信连接后,从检测框架的客户端发送检测指令至服务端,检测指令中包含了上述检测程序的调用指令,该调用指令用于请求执行挂载在虚拟现实软件上的检测程序。
服务端接收到所述检测指令后,对所述检测指令进行处理,所述处理为依据检测指令调用检测程序。期间,检测框架的客户端Socket阻塞等待服务端应答。
三、检测程序的执行。
挂载在虚拟现实软件中的检测程序启动后,执行上述实施例一所包含的所有步骤,在一具体实施方式中,可以进一步细化为由以下步骤实现:
1、声明所需的全局变量;
具体的,检测程序会在软件的初始化阶段申明用于充当数据容器的全局变量,申明全局变量的目的在于方便后续对于数据的存储,这是因为在编程中,数据需要依托相应的载体进行存储。在本实施方式中,分别申明全局变量包括h_fov、equ_Name、vir_fov和is_pass。其中,变量h_fov表示虚拟现实设备的显示设备(如头盔的显示器)的视场角;变量equ_Name表示虚拟现实显示设备的设备名称信息;变量vir_Fov表示虚拟摄像机的视场角;变量is_pass是一个布尔类型的变量,它用于表示当前检测是否通过,如果检测通过则is_pass=true,如果检测未通过则is_pass=false。
2、通过接口调用获取当前所连接的虚拟现实显示设备的设备名称信息;
可以通过调用虚拟现实显示设备的SDK提供的获取设备信息接口,获取到当前连接显示设备的设备信息;该接口用于让开发者识别当前所连接的外部设备的基础设备信息,所返回的基础设备信息包含了设备的名称、生产商、屏幕分辨率等信息;然后通过调用name属性提取出基础设备信息中的设备名称信息。例如所连接的设备是Oculus Rift DK1,那么通过虚拟现实头盔显示器设备SDK提供的接口就能够自动获取到当前设备的名称信息为Oculus Rift DK1。
3、依据设备名称信息查询预设的设备信息配置表,获取所述显示设备的视场角;
具体的,将预先在检测程序中包含一张人为创建的设备信息配置表,这张配置表根据需要记录了目前市场面上各种虚拟现实显示设备的设备信息,所述设备信息中包含各个显示设备对应的视场角。
优选的,该设备信息配置表为XML格式,利于存储和数据的分析处理;其中包含了一个根节点,根节点下包含了若干个命名为equipment的子节点,每个equipment节点下又分别包含了命名为equipmentName和Fov的子节点。equipmentName和Fov分别记录的是设备的名称信息和虚拟现实显示设备的视场角信息。
当检测程序获取到所连接的虚拟现实显示设备的设备名称后,将以该设备名称作为关键字去查询设备信息配置表,判断表中是否包含当前连接设备的设备信息。如果不包含,则调用检测信息接口转化检测数据格式,返回相关检测信息给检测框架,检测人员可以根据返回的信息判断目前配置信息表中是否缺失了某些虚拟现实显示设备的设备信息。如果包含,则说明当前连接显示设备的设备信息已经包含在设备信息配置表中,读取配置表中所查询设备的视场角信息,并将该信息赋值给变量h_fov,即存储在变量h_fov的内存空间中。
对应上述的优选方案,以所述显示设备为虚拟现实头盔显示器设备为例,具体可以通过以下方式实现设备信息配置表的查询:
当检测程序开始查询设备信息配置表时,通过XElement.load(.Net提供的XElement类的加载函数)方法读取指定路径下的设备信息配置表,并通过Elements(“equipment”)方法(由.Net提供,根据节点元素名称返回对应名称的节点)返回所有节点名称为equipment的节点列表,遍历该列表中的所有equipment节点,通过算法语句Descendants(“equipmentName”).Select(t=>t.Value).Contains(“Key”)select new筛选出所有equipmentName节点的值为Key的节点,这个Key就是在前述中获取的设备名称信息。这样检测程序就能查询到设备信息配置表中与当前所连接的虚拟现实头盔显示器设备所对应的设备信息;再通过语句Descendants(“Fov”).SingleOrDefault().Value获取到所查询设备的视场角信息。
在查询时,如果没有查询到指定设备的设备信息,则说明设备信息配置表中没有记录当前所连接设备的设备信息,则将当前设备的名称赋值给全局变量equ_Name,并且将变量is_pass的值赋值为false。并调用检测信息接口,该接口用于将检测结果信息转换成json格式的数据流,其中包含了equ_Name(该设备的名称信息)、is_pass(是否通过检测)和message(输出信息)。数据流被序列化后再返回给检测框架进行数据解析、数据存储和报表生成等操作。
在查询时,如果查询到指定设备的信息,则说明该设备的信息已经记录到了设备信息配置表中,则将查询到的虚拟现实头盔显示器的视场角信息赋值给全局变量h_fov。
4、获取当前虚拟场景中虚拟摄像机的视场角;
可以通过直接调用引擎提供的虚拟摄像机视场角获取接口(并非所有引擎都有提供,部分引擎仅仅提供了用于设置视场角的接口,无法进行数据的读取),快速读取当前虚拟摄像机的视场角信息,或者,在引擎没有提供上述接口的情况下,通过计算获取虚拟摄像机的视场角信息。
将获取的虚拟摄像机视场角的值赋值给变量vir_fov。
具体的,请参阅图3、图5和图6,上述计算获取虚拟摄像机的视场角信息的过程可以包括:
首先创建一个摄像机对象,并将主摄像机赋值给该对象,并将摄像机对象的三维坐标初始化为{10,0,0}(摄像机的位置可以理解为图4中的o点)。
加载一个球体对象,将球体对象的三维坐标初始化为{0,0,0},根据初始化坐标我们可以知道摄像机对象与球体对象处于同一个平面内,并且距离为10。即,球体对象的位置相当于图4中点A,点B,点C所在横截面的中心点。
将摄像机对象的视野锁定在球体对象所在的三维坐标上,即{0,0,0}。
在帧更新时,沿着垂直轴方向(即三维坐标值的Y轴)上移球体对象,并在每一帧结束前判断当前的球体对象是否处于虚拟摄像机(即摄像机对象)的视场范围内,即图4所示的视锥体区域内。如果球体对象在结束前依然处于摄像机的视场范围内,则结束当前帧,并在下一帧中继续沿着垂直轴方向上移球体对象。
当球体对象移动出视场范围时,记录球体对象当前的三维坐标(这里标记为point_B{x,y,z})。三维坐标中的y值相当于球体对象当前位置到球体对象起始位置,即{0,0,0}之间的距离。由于视锥体(即视场所形成的区域)横截面是一个矩形,即图4中点A,点B,点C所在的横截面是一个矩形。由此可知,y值的两倍相当于点A,点B,点C所在的横截面的高。
根据头盔显示器设备的屏幕宽高比例,即画面的宽高比计算出点A,点B,点C所在的横截面的宽度,即可以理解为图4中点A到点B的距离。
已知球体对象当前的三维坐标和虚拟摄像机的三维坐标,计算出两者之间的距离,即视锥体上截面所构成的三角形AOB在边AB上的高。
根据上述步骤,计算出图4中点A到点B之间的距离和视锥体上截面所构成的三角形AOB在边AB上的高以后,即可通过公式:
在一具体实施方式中,如图6所示,计算获取虚拟摄像机的视场角信息的过程可以包括:
在启动检测程序后,在检测程序初始化阶段申明全局变量fov_h,用于存放视锥体横截面的高;申明全局变量fov_w,该变量用于存放视锥体横截面的宽度;申明全局变量point_B,该变量用于存放球体对象刚移动出摄像机视场范围时的三维坐标;申明全局变量distance_cameraToB,该变量表示从虚拟摄像机到point_B的距离;申明全局变量point_camera,该变量用于存放虚拟摄像机的三维坐标。
实例化Camera对象,这是一个摄像机类型的对象,通过摄像机类提供的main函数将主摄像机赋值给该对象,并将该对象命名为camObj,实现摄像机对象的创建。摄像机对象上默认包含了一个位移组件,用于控制对象的移动、旋转和缩放。通过GetComponent<Transform>()函数获取当前摄像机对象的位移组件,并通过position属性将三维坐标{10,0,0}赋值给摄像机对象,使摄像机对象的三维空间坐标变更为{10,0,0},实现对该对象的三维坐标的初始化;最后将三维坐标{10,0,0}赋值给变量point_camera。
通过动态加载的方式将一预制体球体动态加载进虚拟场景中,同时初始化球体对象的三维坐标为{0,0,0},该球体将用来测量视锥体横截面的高。
完成上述摄像机三维坐标和球体对象的三维坐标的初始化后,通过Transform类提供的LookAt函数将摄像机的视野对准球体对象的初始位置,即三维坐标{0,0,0}。
帧更新阶段,在每一帧更新时通过Transform类提供的translate函数让球体沿着垂直轴方向平移,即三维坐标的Y轴;并通过OnBecameInvisible回调函数判断球体对象是否移出摄像机的视野范围,即视椎体对应的视场区域。如果球体对象未移出摄像机的视野范围,则完成当前帧的渲染,继续下一帧的渲染,并继续沿着垂直轴平移球体对象。如果球体对象已经移出摄像机的视野范围,则通过GetComponent<Transform>()函数获取球体对象的位移组件,使用Transform类提供的position属性,即定位属性获取球体对象当前的三维坐标,并赋值给变量point_B。
由于球体对象是沿着垂直轴平移的,即三维坐标的Y轴。并且球体对象初始位置的三维坐标为{0,0,0},由此可知球体对象的起始位置和球体对象当前位置之间的距离为球体对象当前位置的Y坐标的值,该值的大小就等于视锥体横截面的高的一半,将该值乘以2并赋值给变量fov_h。
根据渲染画面的宽高比,即当前显示设备屏幕的宽高比。这个数据信息可以从显示设备的设备信息中获取,通过宽高比即可计算出当前视锥体横截面的宽度。(例如渲染画面的宽高比为1:2,则当前视锥体横截面的宽为将宽的值赋值给变量fov_w,即)。
根据摄像机的三维坐标为{10,0,0},球体对象的当前位置的三维坐标为point_B,即通过计算方法({10,0,0}-).magnitude计算出摄像机对象与球体对象当前位置之间的距离,即图4中视锥体上截面三角形AOB中AB边上的高;并赋值给变量distance_cameraToB,其中magnitude函数是Vector3类提供的方法函数,用于计算两个三维坐标之间的距离。
5、计算所述显示设备的视场角与所述虚拟摄像机的视场角的比值,输出检测数据;
通过判断变量h_fov与变量vir_fov之间的比值,从而判断虚拟现实软件中虚拟摄像机视场角设置的值是否合理,如果比值不等于1,则检测不通过,将变量is_pass的值赋值为false;如果比值等于1,则检测通过,将变量is_pass的值赋值为true。优选的,不管检测是否通过,还包括将当前显示设备的设备名称赋值给全局变量equ_Name的步骤。
不论检测是否通过,包括equ_Name(显示设备的名称信息)、is_pass(是否通过检测)和message(输出信息)的检测数据都会被返回给检测框架,具体通过检测信息接口将检测数据(转换格式为jason字符串格式后)返回至检测框架。
四、检测框架接收并处理检测数据。
检测框架接收到检测数据后,将调用close()向服务端Socket发送中断连接请求,服务端Socket接收到请求后,中断与客户端的连接。
检测框架对接收到的检测数据进行解析处理,并依据解析结果数据生成对应的检测报表。具体的,检测框架的客户端Socket对返回的json字符串格式进行解析,解析后的数据包含了equ_Name(该设备的名称信息)、is_pass(是否通过测试)和message(输出信息),然后将这些检测数据信息存储到对应的数据表中,这张表中的数据用于提供给报表生成接口动态调用;调用检测报表生成接口读取数据库中上述数据表中的数据,并自动生成对应的检测报表。
通过本实施例,即可完成对于虚拟现实软件视场角设置合理性的检测,从而帮助测试人员更加准确、高效地进行测试并且提高测试的覆盖度。具体的,通过远程通信的方式解决了测试人员想要对虚拟摄像机的视场角进行检测的话就需要依赖项目源代码的问题,并且通过自动化对视场角进行检测的方式解决了测试虚拟视场角对于测试人员代码阅读能力有较高要求的问题,通过这样的方式即使是完全没有代码能力的纯黑盒测试人员也能够对虚拟视场角进行测试,同时还降低了人力资源的投入;通过自动对数据进行处理、分析、校验和数据存储、报表生成的方式搭建起了一个完成的基于引擎的虚拟摄像机的视场角的检测系统,弥补了这块测试的空白,也解决了测试流程完整性的问题。
实施例三
本实施例对应实施例一和实施例二,提供一种计算机可读存储介质,其上存储有计算机程序,所述程序在被处理器执行时实现上述实施例一或实施例二所述的一种虚拟视场合理性检测的方法所包含的所有步骤。
具体步骤详见实施例一和实施例二,在此不进行复述。
实施例四
请参阅3,本实施例对应实施例一和实施例二,提供一种虚拟视场合理性检测的系统,包括虚拟现实软件和检测框架;所述虚拟现实软件上挂载有一检测程序和一服务端;
所述一服务端与所述检测框架上的客户端之间通过Socket建立通信连接关系;所述服务端依据所述客户端发送过来的检测指令,调用所述检测程序,执行上述实施例一种S1-S3的步骤,或者是执行上述实施例二中第三点的1-5步骤。具体步骤详见实施例一和实施例二,在此不进行复述。
综上所述,本发明提供的一种虚拟视场合理性检测的方法及其系统、计算机可读存储介质,不仅能够实现全自动化、高效率、准确地检测获取虚拟视场合理性结果,为虚拟视场的调整与否提供准确的依据;而且采用远程通信的方式实现,不再需要依赖源代码,显著降低了检测难度,降低了测试人员的门槛,同时也降低了人力资源和时间成本的投入;进一步的,全自动的数据分析、处理、检验和报表生成方式,在弥补这块测试空白的同时,也解决了测试流程完整性的问题,同时提高了检测精确度。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (9)
1.一种虚拟视场合理性检测的方法,其特征在于,包括:
依据当前连接的显示设备的设备名称信息查询预设的设备信息配置表,获取所述显示设备的视场角;
获取当前虚拟场景中虚拟摄像机的视场角;
依据所述显示设备的视场角与所述虚拟摄像机的视场角的比值输出检测结果;
其中,所述获取当前虚拟场景中虚拟摄像机的视场角,具体为:
创建一个摄像机对象,并初始化所述摄像机对象的三维坐标;
加载一个球体对象,并初始化所述球体对象的三维坐标;
锁定所述摄像机对象的视野在所述球体对象的初始三维坐标上;
在逐帧更新渲染时,沿着垂直轴方向上移球体对象,并在当前帧结束前判断其是否处于所述摄像机对象的视场范围内;若是,则结束当前帧的渲染,继续下一帧的渲染;
若否,则获取球体对象当前的三维坐标、渲染画面的宽高比;依据所述球体对象当前的三维坐标、渲染画面的宽高比以及摄像机对象的三维坐标计算得到当前虚拟场景中虚拟摄像机的水平视场角。
2.如权利要求1所述的一种虚拟视场合理性检测的方法,其特征在于,所述获取当前虚拟场景中虚拟摄像机的视场角,具体为:
通过调用开发引擎提供的获取摄像机视场角接口获取当前虚拟场景中虚拟摄像机的视场角。
3.如权利要求1所述的一种虚拟视场合理性检测的方法,其特征在于,所述依据所述球体对象当前的三维坐标、渲染画面的宽高比以及摄像机对象的三维坐标计算得到当前虚拟场景中虚拟摄像机对象的水平视场角,具体为:
依据渲染画面的宽高比以及所述球体对象当前的三维坐标中的Y坐标值计算获取视椎体截面的宽度;
依据所述球体对象当前的三维坐标和摄像机对象的三维坐标计算得到摄像机对象与球体对象当前位置之间的距离;
依据所述宽度和所述距离计算获取当前摄像机对象的水平视场角。
4.如权利要求1所述的一种虚拟视场合理性检测的方法,其特征在于,还包括:
虚拟现实软件启动时创建服务端Socket;
服务端Socket接收客户端Socket发来的连接请求,并与客户端建立通信连接;
服务端在接收到客户端发来的检测指令后,执行所述获取所述显示设备的视场角的步骤。
5.如权利要求4所述的一种虚拟视场合理性检测的方法,其特征在于,所述依据所述显示设备的视场角与所述虚拟摄像机的视场角的比值输出检测结果,具体为:
若无法从预设的设备信息配置表中获取所述显示设备的视场角,或所述显示设备的视场角与所述虚拟摄像机的视场角的比值不为1;则输出检测不通过的检测数据至服务端;
若所述显示设备的视场角与所述虚拟摄像机的视场角的比值为1,则输出检测通过的检测数据至服务端;
服务端返回所述检测数据至客户端;
客户端解析所述检测数据,生成检测结果。
6.如权利要求1所述的一种虚拟视场合理性检测的方法,其特征在于,还包括:
申明全局变量fov_h,用于存储虚拟现实显示设备的视场角;
申明全局变量equ_Name,用于存储显示设备的设备名称信息;
申明全局变量vir_Fov,用于存储虚拟摄像机的视场角;
申明全局变量is_pass,用于表示当前检测是否通过。
7.如权利要求6所述的一种虚拟视场合理性检测的方法,其特征在于,在获取所述显示设备的视场角后,将所述显示设备的视场角赋值给全局变量fov_h;
在获取当前虚拟场景中虚拟摄像机的视场角后,将所述虚拟摄像机的视场角赋值给全局变量vir_Fov;
依据所述全局变量fov_h与全局变量vir_Fov的比值计算结果输出检测结果;
若所述比值计算结果不等于1,则将所述设备名称信息赋值给全局变量equ_Name,并将全局变量is_pass的值赋值为false;
若所述比值计算结果等于1,则将所述设备名称信息赋值给全局变量equ_Name,并将全局变量is_pass的值赋值为true;
输出包括所述全局变量equ_Name和全局变量is_pass的检测结果。
8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述程序在被处理器执行时实现权利要求1-7任意一项所述的一种虚拟视场合理性检测的方法所包含的步骤。
9.一种虚拟视场合理性检测的系统,其特征在于,包括虚拟现实软件和检测框架;所述虚拟现实软件上挂载有一检测程序和一服务端;
所述一服务端与所述检测框架上的客户端之间通过Socket建立通信连接关系;所述服务端依据所述客户端发送过来的检测指令,调用所述检测程序,执行权利要求1-3、6-7中任意一项所述的一种虚拟视场合理性检测的方法所包含的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810462485.4A CN108573505B (zh) | 2018-05-15 | 2018-05-15 | 虚拟视场合理性检测的方法及其系统、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810462485.4A CN108573505B (zh) | 2018-05-15 | 2018-05-15 | 虚拟视场合理性检测的方法及其系统、存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108573505A CN108573505A (zh) | 2018-09-25 |
CN108573505B true CN108573505B (zh) | 2020-07-10 |
Family
ID=63572536
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810462485.4A Active CN108573505B (zh) | 2018-05-15 | 2018-05-15 | 虚拟视场合理性检测的方法及其系统、存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108573505B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114531904A (zh) * | 2020-09-09 | 2022-05-24 | 京东方科技集团股份有限公司 | Ar/vr图像显示方法、ar/vr图像显示设备和计算机程序产品 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103500462A (zh) * | 2013-10-14 | 2014-01-08 | 合肥完美世界网络技术有限公司 | 一种虚拟游戏场景的图像的提供方法和系统 |
CN107065164A (zh) * | 2017-04-20 | 2017-08-18 | 深圳市元征科技股份有限公司 | 图像展示方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6791574B2 (en) * | 2000-08-29 | 2004-09-14 | Sony Electronics Inc. | Method and apparatus for optimized distortion correction for add-on graphics for real time video |
-
2018
- 2018-05-15 CN CN201810462485.4A patent/CN108573505B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103500462A (zh) * | 2013-10-14 | 2014-01-08 | 合肥完美世界网络技术有限公司 | 一种虚拟游戏场景的图像的提供方法和系统 |
CN107065164A (zh) * | 2017-04-20 | 2017-08-18 | 深圳市元征科技股份有限公司 | 图像展示方法及装置 |
Non-Patent Citations (1)
Title |
---|
3D虚拟摄像机视角调节的研究;陈旭亮;《计算机技术与发展》;20120630;第22卷(第6期);243-246 * |
Also Published As
Publication number | Publication date |
---|---|
CN108573505A (zh) | 2018-09-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113570721B (zh) | 三维空间模型的重建方法、装置和存储介质 | |
CN108304075B (zh) | 一种在增强现实设备进行人机交互的方法与设备 | |
US6226783B1 (en) | Object oriented method of structuring a software step program | |
KR20210121182A (ko) | 증강 현실 시스템 | |
US8121353B2 (en) | Apparatus, system and method for mapping information | |
CN104346612B (zh) | 信息处理装置和显示方法 | |
EP3259679B1 (en) | An automatically invoked unified visualization interface | |
CN111932664A (zh) | 图像渲染方法、装置、电子设备及存储介质 | |
US9996947B2 (en) | Monitoring apparatus and monitoring method | |
CN103914876A (zh) | 用于在3d地图上显示视频的方法和设备 | |
US7377650B2 (en) | Projection of synthetic information | |
CN114640833B (zh) | 投影画面调整方法、装置、电子设备和存储介质 | |
CN115578433B (zh) | 图像处理方法、装置、电子设备及存储介质 | |
JP7043601B2 (ja) | 環境モデルを生成するための方法および装置ならびに記憶媒体 | |
CN111897525A (zh) | 大数据处理方法及系统 | |
CN107748715B (zh) | 基于Unity的纹理贴图配置信息检测方法及其系统 | |
CN113470112A (zh) | 图像处理方法、装置、存储介质以及终端 | |
CN108573505B (zh) | 虚拟视场合理性检测的方法及其系统、存储介质 | |
CN116610881A (zh) | 一种基于低代码软件的WebGL浏览交互方法 | |
CN112950759A (zh) | 基于房屋全景图的三维房屋模型构建方法及装置 | |
CN112465971A (zh) | 模型中点位的引导方法和装置、存储介质、电子设备 | |
CN116701679A (zh) | 倾斜摄影数据存储方法及系统 | |
CN107767434B (zh) | 虚拟现实技术中纹理贴图配置信息的获取方法、存储介质 | |
US10169216B2 (en) | Simulating sensors | |
CN112463891B (zh) | 一种数据同步方法、设备、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |