我正在使用Vuforia SDK开发增强现实应用。我正在尝试使用AVCaptureVideoPreviewLayer和SceneKit进行应用程序渲染,而不是使用Vuforia示例代码提供的原始OpenGL调用。
我得到了AVCaptureVideoPreviewLayer和没有Vuforia的SceneView,即我设法在相机视频背景上绘制3D场景。代码位于:https://github.com/lge88/scenekit-test0/blob/master/scenekit-test0/GameViewController.swift#L74-L85:
func initViews() {
let rootView = self.view
let scnView = createSceneView()
let scene = createScene()
scnView.scene = scene
let videoView = createVideoView()
rootView.addSubview(videoView)
rootView.addSubview(scnView)
}
实施可概括为:
目前我正在尝试集成增强现实功能,GameViewController.swift#L68-L71:
initViews()
animateScene()
initControls()
ARServer(size:viewFrame.size, done: initARCallback)
ARServer是一个负责Vuforia初始化的类,它的实现取自Vuforia ImageTargets示例代码。跟踪器正在工作,它可以成功跟踪样本数据集的目标。
然而,AVCaptureVideoPreviewLayer渲染无法正常工作,视频渲染区域的面积调整大小,视频层未更新,它显示了跟踪器摄像头启动时捕获的静态图像。以下是ipad屏幕截图的显示效果:https://github.com/lge88/scenekit-test0/blob/master/video-preview-layer-issue.png
答案 0 :(得分:0)
这种策略可能会让你很快变得丑陋。更好的方法是使用一个OpenGL上下文将所有内容渲染到一个视图中。如果Vuforia想要做自己的GL内容,它也可以共享该视图/上下文。
查看Apple的GLCameraRipple示例代码,了解将实时摄像机图像转换为GL,以及SCNRenderer
使SceneKit将其内容呈现为任意OpenGL(ES)上下文。
或者,如果您只想将相机图像放入SceneKit视图中,请记住您可以将任何Core Animation图层分配给材质的contents
- 这也适用于AVCaptureVideoPreviewLayer
。< / p>