2017-07-24 57 views
1

我想呈現一個jpg圖像作爲浮動在空間中的2D矩形。使用SpriteKit示例 - 如何從ARSKViewDelegate返回一個jpg圖像?如何使用ARKit ARSKViewDelegate呈現jpg圖像?

該演示返回一個SKLabelNode - 是否有一個適合於我從網絡中獲取的jpg圖像的節點類,也許是UIImage

func view(_ view: ARSKView, nodeFor anchor: ARAnchor) -> SKNode? { 
    // Create and configure a node for the anchor added to the view's session. 
    let labelNode = SKLabelNode(text: "") 
    labelNode.horizontalAlignmentMode = .center 
    labelNode.verticalAlignmentMode = .center 
    return labelNode; 
} 
+0

SpriteKit(您提到的API中的「SK」)*全部關於*將圖像放在屏幕上。你有沒有看過它的[docs](https://developer.apple.com/documentation/spritekit)呢? – rickster

+0

是的,我在看文檔,但沒有看到任何關於來自UI圖像的SKNode。狩獵周圍的stackoverflow我找到了答案使用SKTexture和SKPriteNode – MonkeyBonkey

+0

我很好奇'SKSpriteNode'在該文檔頁面沒有足夠的突出...「一個節點繪製矩形紋理,**圖像**或顏色。「 – rickster

回答

0

看起來我可以在SKTexture中使用SKSpriteNode。唯一的問題是我在日誌中看到關於降級ar性能的警告。 [Technique] World tracking performance is being affected by resource constraints [1]

let url = URL(string: imageURL) 
    let data = try? Data(contentsOf: url!) //make sure your image in this url does exist, otherwise unwrap in a if let check 
    let theImage = UIImage(data: data!) 
    let Texture = SKTexture(image: theImage!) 
    return SKSpriteNode(texture: Texture) 
0

您可以使用SCNPlane和分配UIImage爲平面的內容。

let imagePlane = SCNPlane(width: sceneView.bounds.width/6000, height: sceneView.bounds.height/6000) 
imagePlane.firstMaterial?.diffuse.contents = //<-- UIImage here 
imagePlane.firstMaterial?.lightingModel = .constant 
let planeNode = SCNNode(geometry: imagePlane) 

UPDATE:現在我注意到您使用SpriteKit。我共享的代碼是使用SceneKit。

+0

感謝您的回答 - 在這種情況下使用spritekit vs scenekit更高效嗎?或者,這真的不重要嗎? – MonkeyBonkey

+0

嗯,我認爲這並不重要,但我沒有足夠的知識來確認它是100%。 – ricardopereira

+0

我假設它的所有Open GL - ES - SpriteKit或SceneKit。那就是你如何在Sprite Kit中做正常的地圖。 SpriteKit節點總是面向相機,並且相機視角減小? –