ここ数日、Xcode 6 と iOS 8 のすべての利点について頭を悩ませてきました。私は現在、SceneKit を使用して、何ができるかを感じています。
シーンにオブジェクトを配置しやすくするために、視覚的なグリッドを構築しようとしています。
Playground は期待どおりに表示されますが、Simulator/Device はそうではありません。それがバグなのか、何か間違ったことをしているのかはわかりません。
次のコードがあります。
for index in -20..20 {
let i = CFloat(index)
let neg = i - 20
let pos = i + 20
var lat = [
SCNVector3Make(neg, 0, i),
SCNVector3Make(pos, 0, i)
]
var lng = [
SCNVector3Make(i, 0, neg),
SCNVector3Make(i, 0, pos)
]
var indices: CInt[] = [0, 1]
let latSource = SCNGeometrySource(vertices:&lat, count:2)
let lngSource = SCNGeometrySource(vertices:&lng, count:2)
let indexData = NSData(bytes:indices, length:sizeof(CInt) * countElements(indices))
let element = SCNGeometryElement(data:indexData, primitiveType:SCNGeometryPrimitiveType.Line, primitiveCount:2, bytesPerIndex:sizeof(CInt))
let latLine = SCNGeometry(sources:[latSource], elements:[element])
let lngLine = SCNGeometry(sources:[lngSource], elements:[element])
let latLineNode = SCNNode(geometry:latLine)
let lngLineNode = SCNNode(geometry:lngLine)
scene.rootNode.addChildNode(latLineNode)
scene.rootNode.addChildNode(lngLineNode)
}
Playground の 2 行目はlet i = CGFloat(index)
ですが、コードは Playground と私が持っている iOS Xcode 6 プロジェクトの間で同じです。
Playground では、目的のグリッドを取得します。ただし、シミュレーターとデバイスでは、ガベージが発生します。呼び出しをどのように変更してもSCNVector3Make
、iOS またはシミュレーターでグリッドを適切に表示できません。
また、シミュレータとデバイスに表示される内容は同じであることに注意してください。
シーンにもボックスを追加してみました。を使用するSCNBox
と、正しく表示されますが、必要以上に大きくなります。ただし、(Playground で正しく動作する) カスタム ジオメトリを使用すると、ボックスの寸法が大きくずれます。立方体というより壁のように見えます。
私が見ているものを示すためにスクリーンショットを含めようとしましたが、画像を投稿するには少なくとも10の評判ポイントが必要なようです.
前もって感謝します!
アップデート
以下のコメンターの質問に答えるには(シーンの初期化方法に関して):
プロジェクト(Simulator/Device で実行される)では、次のように取得します。
let scene = SCNScene()
let sceneView = SCNView(frame:UIScreen.mainScreen().bounds)
// Build up grid
sceneView.scene = scene
self.view = sceneView
Playground では、次のようにします。
let sceneView = SCNView(frame: CGRect(x: 0, y: 0, width: 500, height: 300))
let scene = SCNScene()
sceneView.scene = scene
XCPShowView("The Scene View", sceneView)
// Build up grid
更新 2
OSX アプリを作成し、生成された GameViewController コードを変更して同じ構造を生成すると、すべてが期待どおりに機能しました。ボックスの色を赤に更新しませんでした。OSX アプリではキューブとカメラの位置が少し異なります。
十分なポイントが得られたので、私が見ているものを示す画像を追加します。
また、 Xcode Beta 2 と 3 の両方でこれを試したことに注意してください。結果は同じでした。
プレイグラウンドで見たもの
OSX アプリに表示される内容
iOS シミュレータで見たもの
iOS 8 を電話と iPad で削除したので、それらのスクリーン ショットはありませんが、シミュレータと同じように見えます。
これについては、Apple を通じてバグ レポートを提出します。
更新 3
これらのプロジェクトのリポジトリを作成したので、興味のある人は誰でも見ることができます (おそらく、私が間違っていることに気付いていないことがあります)。
私が間違っていることや、どうすればもっとうまくやれるか教えてください。
助けてくれてありがとう!