MetalScope 0.16.0

MetalScope 0.16.0

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最后发布2017年9月
SwiftSwift 版本3.1
SPM支持 SPM

Jun Tanaka 维护。



MetalScope 0.16.0

  • eje Inc.

基于 Metal 的 iOS 360° 全景视图。

特点
🤘 基于 SceneKit + Metal 构建
👀 支持 Cardboard 的扭曲立体视图
🌐 支持单声道/立体等角图像/视频
▶️ 直接访问 AVPlayer 实现视频控制
👆 平滑触摸旋转和重新居中
🌄 自定义 SCNScene 呈现
🐦 使用 Swift 3 编写

用法

全景视图

使用 PanoramaView 显示等角图像或视频。

import MetalScope
import Metal
import AVFoundation

guard let device = MTLCreateSystemDefaultDevice() else {
    fatalError("MetalScope requires Metal 🤘")
}

let panoramaView = PanoramaView(frame: ..., device: device)

// load monoscopic panorama image
let panoramaImage = UIImage(...)
panoramaView.load(panoramaImage, format: .mono)

// load stereoscopic panorama video
let videoURL = URL(...)
let player = AVPlayer(url: videoURL)
panoramaView.load(player, format: .stereoOverUnder)
player.play()

// load any SCNScene
panoramaView.scene = ...

PanoramaView 通过设备运动和用户的滑动手势旋转视角。要重置旋转,只需调用 setNeedsResetRotation()

let panoramaView: PanoramaView = ...

// double tap to re-center the scene
let recognizer = UITapGestureRecognizer(
  target: panoramaView,
  action: #selector(PanoramaView.setNeedsResetRotation(_:)))
recognizer.numberOfTapsRequired = 2

panoramaView.addGestureRecognizer(recognizer)

// if you want to disable pan gesture:
panoramaView.panGestureRecognizer.isEnabled = false

PanoramaView Preview

YouTube 上的 60 FPS 演示

立体视图

对于 Google Cardboard 的立体显示,请使用 StereoViewStereoViewController

let stereoViewController = StereoViewController(device: ...)

// load media
stereoViewController.load(image, format: .stereoOverUnder)

// or any SCNScene
stereoViewController.scene = panoramaView.scene

// customize stereo parameters if needed
stereoViewController.stereoParameters = StereoParameters(
  screenModel: .default,
  viewerModel: .cardboardMay2015)

present(stereoViewController, animated: true, completion: nil)

Preview of StereoViewController

查看示例应用程序以获取更多示例。

模拟器

PanoramaViewStereoViewStereoViewController 也可以通过使用替代的初始化器在 iOS 模拟器上使用。

#if arch(arm) || arch(arm64)
let panoramaView = PanoramaView(frame: view.bounds, device: device)
#else
let panoramaView = PanoramaView(frame: view.bounds) // simulator
#endif

请注意,这些类在模拟器中的功能会受到很大限制。例如,PanoramaView 可以显示图片,但不能显示视频。对于 StereoViewStereoViewController,它只是一个占位符,不会显示任何内容。

需求

  • Xcode 8.2+
  • iOS 9.0+
  • Swift 3.0+
  • 金属(Apple A7+)

备注:Metal 不受 iOS 模拟器支持。😢

安装

手动

您也可以通过将 MetalScope.xcodeproj 拖放到您的项目或工作区来手动安装框架。

许可证

MetalScope 在 MIT 许可证下发布。详细信息请参阅 LICENSE。