2017-09-03 1 views
0

Je ne suis pas en mesure d'ajouter une image au cube dans ARKit en utilisant l'objet "Matériau".Impossible d'ajouter une image de texture à un cube dans ARKit

Voici le code:

import UIKit 
import SceneKit 
import ARKit 

class SimpleBoxViewController: UIViewController, ARSCNViewDelegate { 

var sceneView: ARSCNView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.sceneView = ARSCNView(frame: self.view.frame) 
    self.view.addSubview(self.sceneView) 

    sceneView.delegate = self 
    sceneView.showsStatistics = true 

    let scene = SCNScene() 

    let box = SCNBox(width: 0.2, height: 0.2, length: 0.2, chamferRadius: 0) 

    let material = SCNMaterial() 

    //This is not working 
    material.diffuse.contents = UIImage(named: "<someImage>.png") 

    let node = SCNNode() 
    node.geometry = box 
    node.geometry?.materials = [material] 
    node.position = SCNVector3(0, -0.1, -0.5) 
    scene.rootNode.addChildNode(node) 

    sceneView.scene = scene 


} 

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 

    let configuration = ARWorldTrackingConfiguration() 
    sceneView.session.run(configuration) 
} 

override func viewWillDisappear(_ animated: Bool) { 
    super.viewWillDisappear(animated) 

    // Pause the view's session 
    sceneView.session.pause() 
} 

J'ai essayé d'ajouter différentes images différentes, mais rien ne fonctionne. La seule image qui fonctionne est l'image nommée "textures.png" qui est préchargée dans un projet ARKit.

Existe-t-il une exigence spécifique pour qu'une image soit chargée?

Répondre

2

Je ne suis pas sûr à 100% sur celui-ci, mais le problème pourrait être d'inclure le .png avec imageName, puisque cette image devrait être dans votre dossier Assets.

Quoi qu'il en soit, ce code fonctionne pour moi et essaie de faire la même chose en ce qui concerne la création du cube avec une image.

var box = SCNBox(width: pd.width, height: pd.height, length: 0.01, 
chamferRadius: 0.0) 
var imageMaterial = SCNMaterial() 
var image = UIImage(named: "image") 
imageMaterial.diffuse.contents = image 
box.materials = [imageMaterial, imageMaterial, imageMaterial, imageMaterial, imageMaterial, imageMaterial] 
var cube = SCNNode(geometry: box) 
+1

Cela est correct: UIImage (nommé: "") ne nécessite pas d'extension, par ex. png –

0

vous devez ajouter le chemin comme:

material.diffuse.contents = UIImage(named: "art.scnassets/textur") 

cela fonctionne pour moi.