2017-08-11 13 views
2

私はこれをARKitで実行しています。試してみると三角形が表示され(非常に背が高い)、カメラの右側に2つ表示されます。私が持っている問題は、私がオブジェクトに画像素材を適用することができないということです私はそれは色だ変更できますが、イメージを適用しない:Scenekit - カスタムジオメトリにUIImageマテリアルを追加する

だから、この作品:

triangle.firstMaterial?.diffuse.contents = UIColor.red 

しかし、これはしません。ここで

triangle.firstMaterial?.diffuse.contents = UIImage(named: "wallpaper.jpg") 

はXcode9で新鮮ARKitプロジェクトから完全なのViewControllerコードです:

import UIKit 
import SceneKit 
import ARKit 

class ViewController: UIViewController, ARSCNViewDelegate { 

    @IBOutlet var sceneView: ARSCNView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     sceneView.delegate = self 

     let scene = SCNScene() 

     let triangle = SCNGeometry.triangleFrom(vector1: SCNVector3(x: 0.059511181, y: -0.181795284, z: -0.0939711183), vector2: SCNVector3(x: 0.113824688, y: -0.181780666, z: -0.0674673915), vector3: SCNVector3(x: 0.113824688, y: 1.8182193, z: -0.0674673915)) 

     triangle.firstMaterial?.diffuse.contents = UIImage(named: "wallpaper.jpg") 

     let triangleNode = SCNNode(geometry: triangle) 

     triangleNode.name = "Triangle" 

     scene.rootNode.addChildNode(triangleNode) 

     sceneView.scene = scene 

    } 

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

     // Create a session configuration 
     let configuration = ARWorldTrackingSessionConfiguration() 

     // Run the view's session 
     sceneView.session.run(configuration) 
    } 

    override func viewWillDisappear(_ animated: Bool) { 
     super.viewWillDisappear(animated) 
     sceneView.session.pause() 
    } 

} 

extension SCNGeometry { 
    class func triangleFrom(vector1: SCNVector3, vector2: SCNVector3, vector3: SCNVector3) -> SCNGeometry { 

     let indices: [Int32] = [0, 1, 2] 

     let source = SCNGeometrySource(vertices: [vector1, vector2, vector3]) 

     let element = SCNGeometryElement(indices: indices, primitiveType: .triangles) 

     return SCNGeometry(sources: [source], elements: [element]) 
    } 
} 

私が含まれていない唯一のものは、テクスチャ画像ですが、ダウンロードされた画像はすべて行います。

おかげ

答えて

1

ジオメトリ上にテクスチャをマッピングすることを可能にするために、SceneKitはあなたの頂点のちょうど位置に加えて、セマンティック.texcoordのジオメトリソースを持っている必要があります。

+0

応答していただきありがとうございます。例を表示できますか? –

+0

この記事はかなり人気があります:http://ronnqvi.st/custom-scenekit-geometry/ – mnuages

+0

多くのおかげで、私は読んでいます。 –