[swift] scenekit / テクスチャをNodeにRepeatして貼り付ける方法

テクスチャを使用しないでタイル調の模様の床を作成するコードは、こちらで紹介したが、

やはり、テクスチャをリピートしてタイル調の床を作成してみたい。

使用したテクスチャはこちら↓

floor

そんな時は下記のコードで実現することができる。

override func viewDidLoad() {
 super.viewDidLoad()
 //カメラなどの環境設定は省略
 
 setupFloor(scene: scene)
 }

func setupFloor(scene:SCNScene) {

 //マテリアルを作成
 let Material = SCNMaterial()

 //テクスチャ画像を指定
 Material.diffuse.contents = UIImage(named: "art.scnassets/floor.png")

 //横方向にRepeat
 Material.diffuse.wrapS = SCNWrapMode.repeat
 //縦方向にRepeat
 Material.diffuse.wrapT = SCNWrapMode.repeat
 //面に対してどれだけRepeatさせるか、↓の例だと、横に10個、縦に10個テクスチャが配置される。
 //この数値によりテクスチャ画像が伸縮させられる
 Material.diffuse.contentsTransform = SCNMatrix4MakeScale(10, 10, 0)
 //テクスチャが貼られたモデルの色を緑にする
 Material.emission.contents = UIColor.green
 //オブジェクトの透明度
 Material.transparency = 0.5
 
 //SCNPlaneを作成
 let Tile = SCNPlane(width:10, height:10)

 //マテリアルを適用
 Tile.firstMaterial = Material;
 
 //ノードを作成
 let tileNode = SCNNode()

 //ジオメトリを適用
 tileNode.geometry = Tile;

 //ノードの配置を設定
 tileNode.position = SCNVector3Make(0, 0.1, 0);

 //SCNPlaneはデフォルトでは立っているので、横に寝かせて床にする
 tileNode.eulerAngles = SCNVector3(x:GLKMathDegreesToRadians(-90), y: 0, z: 0)
 
 //シーンに追加
 scene.rootNode.addChildNode(tileNode)

}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です