SceneKit仅显示部分旋转的大型SCNPlane

时间:2017-08-05 13:31:19

标签: rotation scenekit

我尝试创建一个大型SCNPlane来覆盖整个屏幕。测试代码如下:红色框(尺寸1x1x1)位于蓝色平面的中间(尺寸200 x200)。它们都位于中心点(0,0,0),相机距离该点仅为+5。

当平面节点面向摄像机(大角度)时,它运行良好(图1),左右两侧都可以覆盖屏幕的整个左右两侧。但是,当我将平面旋转到一个小角度(使用相机)时,只显示一小部分。在图2中,平面的左侧更靠近相机。左侧应足够宽(100侧)以覆盖屏幕的所有左侧但不是。将飞机的尺寸增加到10倍(到2000)并没有帮助。

关于问题和解决方案的任何想法?感谢

override func viewDidLoad() {
    super.viewDidLoad()

    let scnView = self.view as! SCNView
    scnView.backgroundColor = UIColor.darkGray
    scnView.autoenablesDefaultLighting = true
    scnView.allowsCameraControl = true

    scnView.scene = SCNScene()
    let cameraNode = SCNNode()
    cameraNode.camera = SCNCamera()
    scnView.scene?.rootNode.addChildNode(cameraNode)
    cameraNode.position = SCNVector3(x: 0, y: 0, z: 5)


    let theBox = SCNBox(width: 1, height: 1, length: 1, chamferRadius: 0)
    theBox.firstMaterial?.diffuse.contents = UIColor.red

    let theBoxNode = SCNNode(geometry: theBox)
    theBoxNode.position = SCNVector3(0, 0, 0)
    scnView.scene?.rootNode.addChildNode(theBoxNode)

    let plane = SCNPlane(width: 200, height: 200)
    plane.firstMaterial?.diffuse.contents = UIColor.blue
    let planeNode = SCNNode(geometry: plane)
    scnView.scene?.rootNode.addChildNode(planeNode)
}

Blue plane face to camera

Blue plane rotated to a small angle to camera. Left side is closer but it does not cover whole left side of the screen

1 个答案:

答案 0 :(得分:1)

您可能需要检查相机的zNear属性,以确保没有剪裁飞机。你可以找到剪裁平面here的解释。