2
我在scenekit中創建了一個多維數據集,並嘗試使用MPMoviePlayerController的一個實例作爲其材質。這種作品雖然不錯,但並不完美:視頻看起來非常跳躍,就像在視頻幀之間跳轉一樣(基本上是從頭到尾重播幀)。聲音很好。在SceneKit中使用MPMoviePlayerController作爲紋理
我做了所發生的事情的短抓屏,我想這是從視頻明顯:Youtube vid
這是處理映射到多維數據集和玩家創建的代碼:
var moviePlayer: MPMoviePlayerController?
func startPlayingVideo(){
let mainBundle = NSBundle.mainBundle()
let url = mainBundle.URLForResource("Sample", withExtension: "m4v")
moviePlayer = MPMoviePlayerController(contentURL: url)
if let player = moviePlayer{
/* Listen for the notification that the movie player sends us whenever it finishes playing */
NSNotificationCenter.defaultCenter().addObserver(self, selector: "videoHasFinishedPlaying:", name: MPMoviePlayerPlaybackDidFinishNotification, object: nil)
println("Successfully instantiated the movie player")
player.scalingMode = .AspectFit
var materials = [SCNMaterial]()
for i in 1...6 {
let material = SCNMaterial()
material.diffuse.contents = player.view.layer
player.view.frame = CGRectMake(0, 0, 200, 200)
materials.append(material)
}
boxGeometry.materials = materials
player.controlStyle = MPMovieControlStyle.None
player.play()
}
else {
println("Failed to instantiate the movie player")
}
}
任何想法如何解決這個框架跳躍,爲什麼會發生?非常感謝
'MPMoviePlayerController'似乎是一種將視頻內容紋理映射到SceneKit內容的奇怪方式。你有沒有試過'AVPlayerLayer'或'SKVideoNode'? – rickster
另外,如果您期望立方體在所有六個面上都具有相同的內容,那麼最好爲整個立方體使用單一材質,而不是同一材質的六個副本。 – rickster
@ rickster感謝您的建議。我剛剛用AVPlayerLayer而不是MPMoviePlayerController試過,結果是一樣的。我開始認爲它可能是模擬器的行爲,不幸的是我沒有ios8設備,我會在家中檢查它。 (順便說一句,是的,我知道立方體/甚至沒有必要有一個循環 - 這只是一個快速測試/,最後我想將它映射到一個球體上,我只是看到它更好在一個立方體上)。 – Fygo