2015-04-04 3 views
0

Я создал объекты круглого массива, никаких проблем.Странное поведение с узлом SceneKit

Когда я вращаюсь, в центре есть функция sinc или gaussian.

Камера AZ 60, радиус структуры 30.

Исходное представление, никаких артефактов enter image description here

повернутые 90 ° вверх, никаких артефактов enter image description here

повернутые на 180 градусов, появляется артефакт в центре объекта enter image description here

Продолжение вращения, артефакт все еще существует. enter image description here

Код объекта здесь

class func Build(scene: SCNScene) -> SCNNode { 

    let radius: Double = 30.0 
    let numberOfStrands: Int = 24 

    //Create the base chromosomes. 
    let baseChromosome = SCNBox(width: 4.0, height: 24, length: 1.0, chamferRadius: 0.5) 
    let baseChromosomes = DNA.buildCircleOfObjects(baseChromosome, numberOfItems: numberOfStrands, radius: radius) 
    baseChromosomes.position = SCNVector3(x: 0, y: 0.5, z: 0) 
    return baseChromosomes 

    } 

    class func buildCircleOfObjects(_geometry: SCNGeometry, numberOfItems: Int, radius: Double) -> SCNNode { 

    var x: Double = 0.0 
    var z: Double = radius 
    let theta: Double = (M_PI)/Double(numberOfItems/2) 
    let incrementalY: Double = (M_PI)/Double(numberOfItems) * 2 

    let nodeCollection = SCNNode() 
    nodeCollection.position = SCNVector3(x: 0, y: 0.5, z: 0) 

    for index in 1...numberOfItems { 

     x = radius * sin(Double(index) * theta) 
     z = radius * cos(Double(index) * theta) 

     let node = SCNNode(geometry: _geometry) 
     node.position = SCNVector3(x: Float(x), y: 0, z:Float(z)) 

     let rotation = Float(incrementalY) * Float(index) 
     node.rotation = SCNVector4(x: 0, y: 1, z: 0, w: rotation) 
     nodeCollection.addChildNode(node) 

    } 

    return nodeCollection 

    } 
} 
+0

Я не scenekit pro, но для радиуса 30, если камера z определяет, какое пространство должен перемещать объект, я не думаю, что 60 будет достаточным для цилиндра с не- -зеро высота. Что произойдет, если вы используете большую камеру z (или меньший радиус)? – nhgrif

+0

Я думаю, что вы правы, это комбинация xFov, yFov, zNear, zFar ... изначально я думал, может быть, странный эффект отбраковки. –

+0

эти настройки, наконец, работал 'cameraNode.camera?.xFov = 60 cameraNode.camera?.yFov = 60 cameraNode.camera?.zFar = 1000 cameraNode.camera?.zNear = 0.01' –

ответ

0

С помощью этих настроек

cameraNode.camera?.xFov = 60 
cameraNode.camera?.yFov = 60 
cameraNode.camera?.zFar = 1000 
cameraNode.camera?.zNear = 0.01 

артефакты исчезли. Я думаю, что это проблема с zFar, она должна была обрезать заднюю поверхность равномерно, как аберрацию объектива.

+2

Это * * является отсечение равномерно. Поймите, что ваше кольцо находится под углом. Подумайте о задней стене как о стене света. Когда вы наклоняете цилиндр в эту стену света, подумайте о том, как свет начнет светиться, на каких частях ... – nhgrif

+0

См. Также ['automaticAdjustsZRange'] (https://developer.apple.com/library/mac /documentation/SceneKit/Reference/SCNCamera_Class/index.html#//apple_ref/occ/instp/SCNCamera/automaticallyAdjustsZRange). – rickster

Смежные вопросы