[swift] 立方体の6面それぞれに1枚づつテクスチャ画像を貼る方法
立方体の6面に異なるテクスチャを貼る方法は下記のコードの通り、
[SCNMaterial]という6つのSCNMaterialを要素に持つ配列を、ジオメトリのmaterialに設定すると6面にそれぞれ異なるテクスチャをはることができる。
override func viewDidLoad() { super.viewDidLoad() // sceneを作る let scene = SCNScene() // SCNNodeを作成 let cube = SCNNode() // キューブ型の形状(Geometry)を生成 let cubeGeometry = SCNBox(width: 2, height: 2, length: 2, chamferRadius: 0.02) // テクスチャのイメージのパスを指定 let textureFilePath = [ "art.scnassets/chest/chest_front",//front "art.scnassets/chest/chest_side",//left "art.scnassets/chest/chest_side",//back "art.scnassets/chest/chest_side",//right "art.scnassets/chest/chest_end",//top "art.scnassets/chest/chest_end"//bottom ] // テクスチャ作成関数の呼び出し let textureMaterial = makeTexture(filenameArray: textureFilePath) // ジオメトリにテクスチャを貼り付け cubeGeometry.materials = textureMaterial // ジオメトリをキューブにする cube.geometry = cubeGeometry // キューブの位置を指定 cube.position = SCNVector3Make(-5, 0, 0) // キューブを配置 scene.rootNode.addChildNode(cube) } // テクスチャ配置関数(6つの要素を持つMaterial配列を作成する) func makeTexture(filenameArray : [String]) -> [SCNMaterial] { //空の配列を作成 var materials = [SCNMaterial]() //ファイルパスからMaterial配列にそれぞれ入れ込み、もしパスが6つでなかったら、ブラウンのカラーで塗り for i in 0...5 { let material = SCNMaterial() if i < filenameArray.count { material.diffuse.contents = UIImage(named: filenameArray[i]) }else{ material.diffuse.contents = UIColor.brown } //配列に追加 materials.append(material) } //配列をreturn return materials }