iOS 全景播放器最简单的解决方案
渲染全景視頻
本節學習目標
- 使用SceneKit如何渲染全景視頻
上一節我們講解了如何播放普通視頻,本節我們講解如何播放全景視頻,其實兩者的差異不是很大, 只是使用的渲染幾何體有所不同,普通視頻使用的是平面幾何體,我們全景就使用球體。
- 效果如下
實現步驟
1.第一步 創建工程(略)
2.第二步 導入兩個游戲框架
import SceneKit import SpriteKit3.第三步 創建游戲專用視圖
let scnView = SCNView(frame: self.view.bounds);scnView.scene = SCNScene()self.view.addSubview(scnView);4.第四步 創建一個攝像機
let cameraNode = SCNNode()cameraNode.camera = SCNCamera()cameraNode.camera?.automaticallyAdjustsZRange = true;// 自動調節可視范圍cameraNode.position = SCNVector3Make(0, 0, 0);// 把攝像機放在中間scnView.scene?.rootNode.addChildNode(cameraNode);5.第五步 創建一個節點并綁定一個球體幾何對象
let panoramaNode = SCNNode()panoramaNode.geometry = SCNSphere(radius: 100);panoramaNode.geometry?.firstMaterial?.isDoubleSided = false// 關閉雙面渲染,提高性能panoramaNode.geometry?.firstMaterial?.cullMode = .backpanoramaNode.position = SCNVector3Make(0, 0, 0);scnView.scene?.rootNode.addChildNode(panoramaNode);經驗:
1.全景一般照相機應該放在球體中間,我們要渲染內表面,但是默認渲染的是外表面,所以我們設置一下noramaNode.geometry?.firstMaterial?.cullMode = .back
2.如果你想兩個面都進行渲染請使用panoramaNode.geometry?.firstMaterial?.isDoubleSided = true
3.panoramaNode.geometry = SCNSphere(radius: 100) 半徑不要設置太小
6.第六步 創建一個2D游戲場景和一個播放視頻的對象
let url = Bundle.main.url(forResource: "fly", withExtension: "mp4")let videoNode = SKVideoNode(url: url!)videoNode.size = CGSize(width: 1600, height: 900)videoNode.position = CGPoint(x: videoNode.size.width/2, y: videoNode.size.height/2)videoNode.zRotation = CGFloat(M_PI)let skScene = SKScene()skScene.addChild(videoNode)skScene.size = videoNode.size經驗:
1.視頻添加到項目中的時候,使用右擊->add File to 的方式添加文件
2.指定視頻節點的大小 videoNode.size
3.指定2d場景的大小,這個一般和視頻節點大小保持一致,如果你有特殊要求,可以根據要求設置
4.videoNode.zRotation = CGFloat(M_PI)注意,這點非常重要,一定要將視頻節點旋轉180度,否則渲染出來的畫面會顛倒。
7.第七步 給平面體設置渲染內容
plane.firstMaterial?.diffuse.contents = skScene8.第八步 播放視頻
videoNode.play()9.第十步 打開攝像頭控制查看效果
scnView.allowsCameraControl = true;打開 QQ 掃碼下載更多教程
1489367088.png總結
以上是生活随笔為你收集整理的iOS 全景播放器最简单的解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机学院项目大赛,计算机学院召开202
- 下一篇: boost::process移植笔记