2017-08-27 59 views
0

我正在玩新的ARKit,我能夠創建一個名爲SphereNode的新文件,該文件能夠在視圖上創建一個Sphere droppable。ARKit在場景中放置自定義對象

問題是我真的想添加一個自定義對象而不是標準球體。一些建議?在這裏,您是用於創建球體代碼:

import SceneKit 

class SphereNode: SCNNode { 
    init(position: SCNVector3) { 
     super.init() 
     let sphereGeometry = SCNSphere(radius: 0.005) 
     let material = SCNMaterial() 
     material.diffuse.contents = UIColor.red 
     material.lightingModel = .physicallyBased 
     sphereGeometry.materials = [material] 
     self.geometry = sphereGeometry 
     self.position = position 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 
} 
+0

您可以爲'SCNNode'創建一個子類,以便將其用作標準節點並通常將其添加到場景中。 –

+0

是的我已經實現了它,但我的問題是:我如何設置自定義圖像而不是我創建的Sphere? –

+0

您的意思是您想要將球體的默認白色更改爲自定義紋理還是具有完全自定義幾何?請編輯您的問題 –

回答

0

要使用自定義的幾何形狀,而不是提供者最好的辦法是使用外部編輯器來創建你的場景,如Blender這也是開源的,可選地添加材質和貼圖,然後將其導出爲iOS可以使用的格式,例如DAE。在你的應用程序內部,你可以加載這個文件,並用適當的初始化程序獲得SCNScene。一旦你加載了場景,你可以直接使用它來顯示給用戶或導航它,只需要獲取你想要使用的節點/幾何體/材質,比如將它添加到已經存在的場景中。

  1. 比方說,你的文件被稱爲scene.dae,位於你的應用程序主包,那麼你可以加載它作爲

    let scene = SCNScene(named: 「scene.dae」) 
    

    ,或者如果你喜歡,你還可以指定一個完整的URL,請參閱documentation有關更多詳細信息,請注意這些是可失敗的初始化程序,因此請檢查nil。

  2. 比方說,用其自定義的幾何形狀和紋理您的節點是場景的唯一對象,那麼你就可以得到與

    let obj = scene.rootNode.childNodes.first 
    

    注意對它的引用,這也是一個可選的零所以檢查值,如果我的假設不正確,可以參考SCNNode documentation瞭解如何導航節點圖,scene.rootNode始終是您的出發點。

  3. 既然你有你的場景和對象,我之前說過你有兩個選擇:直接鏈接到你的場景SCNView(我不知道ARKit,但我猜你有一個)而不是手動創建一個空的,或者只取對象/幾何/材質,並且通常將其添加到已經創建的場景中。

如果你的對象不是靜態的,而是動態生成的,你也可以通過建立一個SCNGeometry創建它一點一點,這樣做是有點棘手,你可以使用my library爲我創造了一些有用的功能和類,以幫助該過程。

+0

但我還沒有得到它如何設置DAE文件,而不是我的球體作爲3D對象。謝謝! –

+0

看到我更新的答案,請注意一些可能的錯別字,因爲我來自手機 –

+0

Grazie mille! :P希望其他人會覺得它有用!我會盡快實施! –