Apple Engine

Apple, iPhone, iOS, その周辺のことについて

iOS で SceneKit を試す(Swift 3) その27 - ビルトインジオメトリ SCNSphere(球)

球のジオメトリ。

f:id:x67x6fx74x6f:20170712152708p:plain

 

Scene Editor でのパラメーター

オブジェクトライブラリの Sphere か GeoSphere を Scene Editor にドラッグ&ドロップして、Attributes Inspector を開く(Command + Option + 4)

1番上の Sphere の項目で設定値が変更できる

f:id:x67x6fx74x6f:20170712152724p:plain

 

Sphere と GeoSphere の違いは、 ジオメトリの名前と、geodesic にチェックがついているか否か。

 

Dimensions

Radius

球の半径で初期値は 1。 半径であるため、ジオメトリは倍の大きさになる。

 

Segment Count

X軸とY軸方向での外周での分割数。 初期値は 24。

Geodesic のチェックが入っていると正20面体からの分割数となる。

 

Geodesic

チェックすると三角ポリゴンを均等に麺が構成される。
下記の画像参照。

 

Geodesic: false(デフォルト)
分割数 16

f:id:x67x6fx74x6f:20170712152755p:plain

 

Geodesic: true
分割数 16

f:id:x67x6fx74x6f:20170712152815p:plain

 

コード

// シーン設定
let scnView = self.view as! SCNView
scnView.showsStatistics = true
scnView.allowsCameraControl = true
scnView.debugOptions = .showWireframe // ワイヤーフレーム表示

let scene = SCNScene()
scene.background.contents = UIColor.white
scnView.scene = scene

// カメラ設定
let cameraNode = SCNNode()
cameraNode.camera = SCNCamera()
cameraNode.position = SCNVector3(2.372,1.473,2.399)
cameraNode.eulerAngles = SCNVector3(-Float.pi * 0.125,Float.pi * 0.25,0)
scene.rootNode.addChildNode(cameraNode)

// ライト設定
let lightNode = SCNNode()
let omniLight = SCNLight()
omniLight.type = .omni
lightNode.light = omniLight
lightNode.position = SCNVector3(0,5,0)
scene.rootNode.addChildNode(lightNode)

// SCNSphere
let sphere = SCNSphere(radius: 1)

/*
sphere.radius = 1
sphere.isGeodesic = true
*/

sphere.segmentCount = 16


sphere.firstMaterial?.diffuse.contents = UIColor.black // ワイヤーフレームを見やすくするため黒色に。

let node = SCNNode(geometry: sphere)
scene.rootNode.addChildNode(node)

 

今回はここまで。