本机渲染

渲染增强现实内容,使其正确覆盖真实世界中的物理对象。本文介绍了在支持的平台上以本机应用程序进行渲染时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经验.