Я создал объекты круглого массива, никаких проблем.Странное поведение с узлом SceneKit
Когда я вращаюсь, в центре есть функция sinc или gaussian.
Камера AZ 60, радиус структуры 30.
Исходное представление, никаких артефактов
повернутые 90 ° вверх, никаких артефактов
повернутые на 180 градусов, появляется артефакт в центре объекта
Продолжение вращения, артефакт все еще существует.
Код объекта здесь
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
}
}
Я не scenekit pro, но для радиуса 30, если камера z определяет, какое пространство должен перемещать объект, я не думаю, что 60 будет достаточным для цилиндра с не- -зеро высота. Что произойдет, если вы используете большую камеру z (или меньший радиус)? – nhgrif
Я думаю, что вы правы, это комбинация xFov, yFov, zNear, zFar ... изначально я думал, может быть, странный эффект отбраковки. –
эти настройки, наконец, работал 'cameraNode.camera?.xFov = 60 cameraNode.camera?.yFov = 60 cameraNode.camera?.zFar = 1000 cameraNode.camera?.zNear = 0.01' –