渲染增强现实内容,使其正确覆盖真实世界中的物理对象。本文介绍了在支持的平台上以本机应用程序进行渲染时APIS Vuforia Engine提供的概念和功能
要在手机和平板电脑等设备上渲染AR场景,首先需要渲染视频背景。要渲染增强本身,需要使用投影矩阵和modelView矩阵,它们必须与相机的视频馈送同步。Vuforia Engine提供了一组实用方法,以确保与真实世界中目标姿势相关的渲染始终与视频背景图像同步。Vuforia引擎仅支持在支持的平台上渲染功能。请参阅中的图形API支持支持的版本.
VuRenderConfig
–设置在支持的平台上渲染的视频背景类型的选择。
VuCamera配置
–设置视频模式预设和对焦模式。请参见摄像头API概述了解更多详细信息。
设置VuRenderConfig
渲染配置可以设置为默认值,如下面的代码示例所示。在启动之前设置这些vuEngine启动()
.
//发动机设置VuEngineConfigSet配置集;vuEngineConfigSet创建(&configSet);//使用默认值渲染设置配置VuRenderConfig配置=vuRenderConfigDefault();config.vbRenderBackend=VU_RENDER_VB_BACKEND_DEFAULT;config.vbViewportMode=VU_VIDEOBG_VIEWPORT_MODE_SCALE_TO_FILL;vuEngineConfigSetAddRenderConfig(配置集,&config);
或者,也可以在运行时使用控制器类设置视口模式并定义vb模式
.
VuVideoBackgroundViewportMode vbMode=VU_VIDEOBG_VIEWPORT_MODE_SCALE_TO_FIT;vuRenderControllerSetVideoBackgroundViewportMode(&controller,vbMode);
视频背景类型
这个VuRenderVBBackendType vbRenderBackend
定义视频背景在哪个平台上运行。如果设置为_DEFAULT,则支持的平台将设置为:
- UWP的DiextX 11
- iOS金属
- 为Android和iOS打开GL ES 3.x
注:如果平台支持,您可以为应用程序指定不同的后端配置设置。
视频背景模式
屏幕图像的纵横比由VuVideoBackgroundViewportMode vb视口模式
。您可以将其配置为:
- _填充–将拉伸和裁剪以填充屏幕。
- _FIT–将根据纵横比进行调整,在图像周围添加黑色条纹。
- _NAMETIVE_VIDEO–将使用本机视频模式,不应用纵横比。建议仅在调试时使用此模式。
使用RenderController
可以使用Render Controller类调整特定于渲染的功能。您可以调整屏幕分辨率、视频背景设置和视频背景渲染数据输入。
配置渲染视图分辨率
//设置渲染视图配置VuRenderViewConfig rvConfig;rvConfig.resolution.data[0]=宽度;rvConfig.resolution.data[1]=高度;
检索视频背景纹理大小
本机示例中也提供了此示例代码。
bool getVideoBackgroundTextureSize(VuVector2I和textureSize){VuVideoBackgroundViewInfo vbViewInfo;if(vuRenderControllerGetVideoBackgroundViewInfo(mRenderController,&vbViewInfo)!=VU_SUCCESS){LOG(“获取视频背景视图信息时出错”);返回false;}textureSize=vbViewInfo.vB文本大小;返回true;}
获取视频背景视图信息
VuRenderVideoBackgroundData渲染器VBData;vuRenderControllerUpdateVideoBackgroundTexture(控制器、状态、渲染VBData);
更新方向
也有可能发生方向改变的情况(例如,将设备从横向旋转到纵向),导致矩阵方向错误,不再对齐。当设备方向更改时,需要更新渲染矩阵。为了适应这种情况,您可以在配置步骤中进行设置,然后更新VuView方向
然后将此信息传达给VuRenderState(VuRenderState)
.
在渲染之前设置方向,并在每次视图方向更改时更新方向:
VuViewOrientation方向=VU_VIEW_orientation_LANDSCAPE_LEFT;vuPlatformControllerSetViewOrientation(控制器,方向);
可用的方向值对应于以下内容:
- VU_VIEW_ORIENTATION_LANDSCAPE_LEFT–从纵向视图逆时针旋转90度,以横向视图查看设备。在iOS设备上,这将是_LANDSCAPE_RIGHT。
- VU_VIEW_ORIENTATION_LANDSCAPE_RIGHT–从纵向视图顺时针旋转90度,以横向视图查看设备。在iOS设备上,这将是_LANDSCAPE_LEFT。
- VU_VIEW_ORIENTATION_PORTRAIT–在纵向视图中查看设备。屏幕高度比宽度高。
- VU_VIEW_ORIENTATION_PORTRAIT_UPSIDEDOWN–在纵向视图中查看设备,但方向与_ORIENT相反。
注:即使未执行渲染,也必须设置方向,因为Vuforia引擎依赖此值来报告状态下的准确设备姿势。如果未设置方向,则该值默认为VU_VIEW_orientation_LANDSCAPE_LEFT。
对于特定于平台的视图方向描述符,可以使用转换方法:
vuPlatformControllerConvertPlatformViewOrientation(const VuController*控制器,const void*平台方向,VuView方向*vuOrientational);
转换需要平台方向
以下有效类型之一:
- Android–采用两个值的整数数组。[0]是方向更改的原点值。[1] 是旋转量。
- iOS–将提供
UI接口方向
值。
- UWP–将提供
显示方向_
值取决于您的构建配置(C++/CX、C++/WinRT或其他)。
有关检索特定于平台的定向描述符的更多信息,请参阅参考库。
如果传递的平台方向成功转换为有效的Vuforia视图方向,则调用将返回VU_SUCCESS。
更新VuRenderState
在VuRenderState(VuRenderState)
,包含渲染所需的所有数据,包括视频背景和矩阵。在使用从状态获取渲染帧之前,应设置视频背景视口vuRenderControllerSetRenderViewConfig()
.
vuState获取渲染状态(mVuforiaState,&mCurrentRenderState);
投影矩阵
渲染状态帧将提供与物理摄影机参数相对应的投影矩阵。投影矩阵利用近平面和远平面,并保留适合最常见用例的默认值。
要调整近平面和远平面值,从而影响投影矩阵,请使用以下get/set调用。
vuRenderControllerSetProjectionMatrixNearFar(mRenderController,NEAR_PLAN,FAR_PLANE);
iOS上基于金属的渲染代码使用与OpenGL ES相同的样式矩阵约定。因此,投影矩阵可以互换使用。
DirectX呈现代码需要转换为DirectX矩阵约定,然后才能用于DirectX呈现调用。
视频背景网格
这个vbMesh(虚拟网格)
从渲染状态可以使用着色器操纵视频背景网格。在不需要视频背景渲染的设备上,例如全息镜头等see-through设备vbMesh(虚拟网格)
将为null。
冻结状态
状态更新机制还可用于冻结当前AR会话中的相机帧。使用获取最新状态()
只要您想冻结状态,就可以重用它进行渲染。然后是一个渲染视频背景()
函数可以使用该状态作为视频背景进行渲染。有关AR会话管理的更多信息,请参阅持续AR经验.