簡體   English   中英

Scenekit - 將UIImage材質添加到自定義幾何體

[英]Scenekit - adding UIImage material to custom geometry

我在ARKit中運行它,如果你嘗試一下,三角形出現(非常高)和攝像機右邊的2,圓形稍微盤旋。 我遇到的問題是我無法將圖像材質應用於對象,我可以更改它的顏色,但不能應用圖像:

這樣可行:

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])
    }
}

我唯一沒有包括的是紋理圖像,但下載的任何圖像都可以。

謝謝

為了能夠將紋理映射到幾何體上,除了頂點的位置之外,SceneKit還需要具有語義.texcoord的幾何源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM