簡體   English   中英

SceneKit相機不應該顯示額外的空間

[英]SceneKit camera shows extra space when it should not

更新

我已將項目上傳到GitHub,以便輕松復制問題。

我有一個測試場景,我想在這里定位一個對象(在這種情況下是SCNBox )和屏幕一樣寬。 這是整個代碼。

let scene = SCNScene()
let rootNode = scene.rootNode

// Box
let boxGeometry = SCNBox(width: 1, height: 1, length: 1, chamferRadius: 0)
let boxMaterial = SCNMaterial()
boxMaterial.diffuse.contents = UIColor.redColor()
boxGeometry.firstMaterial = boxMaterial
let boxNode = SCNNode(geometry: boxGeometry)
boxNode.position = SCNVector3(
    x: 0,
    y: 0,
    z: -1)
rootNode.addChildNode(boxNode)

// Camera
let camera = SCNCamera()
camera.zNear = 0
let cameraNode = SCNNode()
cameraNode.position = SCNVector3(
    x: 0,
    y: 0,
    z: 0)
cameraNode.camera = camera
rootNode.addChildNode(cameraNode)

但這並不能產生我所期望的 - 100%寬度覆蓋率。 如下面的屏幕截圖所示,兩側總共有大約2.5%的空白區域。 為什么? 如何調整相機/盒以實現屏幕寬度的全面覆蓋?

問題

這里是您的代碼所做的快速直觀表示(從頂部查看):

1)在(0,0,0)創建一個2x2x2立方體

創建多維數據集

2)將立方體移動到(0,0,-1)

移動立方體

3)在(0,0,0)添加相機

添加相機

如您所見,相機與立方體相交。 這是一種不可預測的行為,它可以交叉,在Z上戰斗,或者只是向內看。

在您的問題中,您使用了1x1x1盒子。 這是它的樣子:

1x1x1盒子

如您所見,該框填充視圖。 但那是因為我使用的是標准相機(36毫米,或大約50°xfov)。 通過移動你的場景,我意識到你有一個非常大的FOV,這意味着你的場景看起來像這樣:

大視野

或者,如果我們放大:

放大

開始了! 那么我們如何解決這個問題呢? 通過增加FOV。 在我們的例子中,角度是90.但你可以用簡單的三角法再次找到它。

地獄是的數學!

現在盒子完全填滿了視口!

好的,你有兩個選擇。

  1. 你可以作弊,這很容易,但不是很方便
    • 因此,隨機增加盒子的大小或將其移近相機
  2. 盡可能地讓它成為適應性的方式
    • 因此看看.projectPoint().unprojectPoint() [因為我很難搞清楚我不能給你任何代碼,你可能試試你的運氣]

希望有幫助:)

編輯
僅供參考 - 我不認為你的問題與相機有關,如果你將盒子的大小設置為0.5而不是1那么它實際上更小,這表明它不是基於相機的錯誤。
另外,如果你跑的比iPhone 6+以外的設備上的應用程序,你會看到,箱子填滿整個屏幕至少在右側。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM