1

私はこれをSwiftでやろうとしています。ただし、私の SCNView には何も表示されません。IB で接続を確認しましたが、すべて問題ありません。ソース コードをObjective CからSwiftに変換する際にエラーが発生したと思います。これが私のコードです:

@IBOutlet var sceneview: SCNView

@IBOutlet var status: NSTextField
var statusCounter: Int = 1


@IBAction func paintRectButton (sender: AnyObject) {
    status.stringValue = "Paint (#\(statusCounter++))"

    var scene: SCNScene = SCNScene()

    var cameraNode: SCNNode = SCNNode()
    cameraNode.camera = SCNCamera()
    cameraNode.position = SCNVector3Make(0, 15, 30)
    cameraNode.transform = CATransform3DRotate(cameraNode.transform, 7.0, 1, 0, 0)
    scene.rootNode.addChildNode(cameraNode)

    var spotlight: SCNLight = SCNLight()
    spotlight.type = SCNLightTypeSpot
    spotlight.color = NSColor.redColor()

    var spotlightNode: SCNNode = SCNNode()
    spotlightNode.light = spotlight
    spotlightNode.position = SCNVector3Make(-2, 1, 0)

    cameraNode.addChildNode(spotlightNode)

    let boxSide = 15.0
    var box: SCNBox =
        SCNBox(width: boxSide, height: boxSide, length: boxSide, chamferRadius: 0)

    var boxNode: SCNNode = SCNNode(geometry: box)
    boxNode.transform = CATransform3DMakeRotation(3, 0, 1, 0)

    scene.rootNode.addChildNode(boxNode)

    sceneview.scene = scene
}
4

1 に答える 1

1

何も表示されないのは、レンダリングするジオメトリ オブジェクトがない方向をカメラが見ているためです。Objective-C コードは-M_PI/7.0カメラの回転角度に (≈ -0.4488 ラジアン) を使用しますが、Swift コードは7.0(≈ 0.7168 ラジアン (π で割った余り)) を使用しています。Swift コードを次のように変更します。

cameraNode.transform = CATransform3DRotate(cameraNode.transform, -M_PI/7.0, 1, 0, 0)

M_PI_2/3元のコードが angleを使用し、Swift コードがangle を使用しているボックスの回転でも、同様の間違いが発生したようです3

boxNode.transform = CATransform3DMakeRotation(M_PI_2/3.0, 0, 1, 0)
于 2014-06-25T08:50:00.367 に答える