我创建了一个圆形数组对象,没问题。
当我旋转时,中心似乎有一个正弦或高斯函数。
相机为z 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
}
}
答案 0 :(得分:0)
使用这些设置
cameraNode.camera?.xFov = 60
cameraNode.camera?.yFov = 60
cameraNode.camera?.zFar = 1000
cameraNode.camera?.zNear = 0.01
文物消失了。我认为这是zFar的一个问题,它应该将背面均匀地剪裁而不像镜头像差。
答案 1 :(得分:0)
Viewing frustum的退出可能是造成大多数问题的原因。然而,另一个常见的原因是误解了SCNView allowsCameraControl的行为,也就是当你捏合放大或缩小(更改相机的fieldOfView),但是点ofView'的立场提醒人们。
你的节点仍然站在pointOfView的后面,不管摄像机的zNear是多么小。因此你看到他们被剪掉了。在这种情况下,下面的代码可以帮助您,至少可以避免这个问题。
sceneView.pointOfView!.simdPosition
= float3(0, 0, -scene.rootNode.boundingSphere.radius)