![](/img/trans.png)
[英]SceneKit background too bright when applying camera frame MTLTexture as a background
[英]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盒子。 這是它的樣子:
如您所見,該框應填充視圖。 但那是因為我使用的是標准相機(36毫米,或大約50°xfov)。 通過移動你的場景,我意識到你有一個非常大的FOV,這意味着你的場景看起來像這樣:
或者,如果我們放大:
開始了! 那么我們如何解決這個問題呢? 通過增加FOV。 在我們的例子中,角度是90.但你可以用簡單的三角法再次找到它。
現在盒子完全填滿了視口!
好的,你有兩個選擇。
.projectPoint()
和.unprojectPoint()
[因為我很難搞清楚我不能給你任何代碼,你可能試試你的運氣] 希望有幫助:)
編輯
僅供參考 - 我不認為你的問題與相機有關,如果你將盒子的大小設置為0.5
而不是1
那么它實際上更小,這表明它不是基於相機的錯誤。
另外,如果你跑的比iPhone 6+以外的設備上的應用程序,你會看到,箱子不填滿整個屏幕至少在右側。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.