2017-10-24 14 views
0

私はARKit(XCode 9/Swift 4)のために自分のシーンのオブジェクト(SCNNode)にプログラムでどのように材料を割り当てるかを考えようとしています。私はプログラムでこれを行うようにしようとしています。同じ形状のオブジェクトをシーン内のメニュー割り当てで行うには多すぎるバリアント(またはユーザー生成の画像)でレンダリングする必要があるからです。オブジェクトは単なる立方体です - 今のところ、私は、アセットフォルダから引き出したこのマテリアルを片側に表示しようとしています。3D SCNNodeにプログラムで材料を割り当てる方法は?

これは私が以前のStackの投稿を参照しようとした現在のコードですが、オブジェクトはまだ残っています。

let material = SCNMaterial() 
material.diffuse.contents = UIImage(named: "texture.jpg") 

let nodeObject = self.lastUsedObject?.childNode(withName: "box", recursively: true) 
// I believed this lets me grab the last thing I rendered in an ARKit scene - please 
// correct me if I'm wrong. My object is also labeled "box". 
nodeObject?.geometry?.materials 
nodeObject?.geometry?.materials[0] = material // I wanted to grab the first face of the box 

ありがとうございます!私はこれをしばらく参考にしてきましたが、私は3Dオブジェクト/ Scenes in Swiftのためのプログラム的な方法を理解することはできません。

+0

最初に、それらを?に変更し、プログラムがクラッシュするかどうかを確認します。クラッシュした場合、あなたはボックスをつかんでいません。 – Knight0fDragon

+0

ええ、 ! " - 頭のおかげで。 – Bryan

答えて

0

全体的に、私はこのようなオブジェクトの材料を設定して、それが働いていた(専用ボックス

var imageMaterial = SCNMaterial() 
imageMaterial.isDoubleSided = false 
imageMaterial.diffuse.contents = UIImage(named: "myImage") 
var cube: SCNGeometry? = SCNBox(width: 1.0, height: 1.0, length: 1, chamferRadius: 0) 
var node = SCNNode(geometry: cube) 
node.geometry?.materials = [imageMaterial] 

の一面をつかむためにだから、おそらくあなたがつかむことができなかったことが考えられますコメントに記載されているオブジェクト

+0

ありがとうございました - これは働いた このメソッドをARKitで使用する場合は、プログラムでSCNNodeを作成してから、コードを介してvirtualObjectとして追加することをお勧めします。デバッグと動作が簡単です。 – Bryan

+0

それはあなたのために働いた場合は、答えをマークすることを忘れていないだけでください。私は助けてうれしい嬉しい:) –

関連する問題