카메라 루트 노드 앞에 SCNPlane 형상의 SCNNode가있는 SCNView가 있습니다.iOS SceneKit에서 UIView 프로젝션 문제
UIView에서 SCNView를 통해 UIImages (Markers) - 주황색 원을 추가하고 있습니다.
모션 리스너에서 평면의 각 모서리 중심에 고정되도록 마커를 배치하려고합니다.
내가 UIView의에 SceneKit 객체에서이 사용 투사를하고 있어요 :
//world coordinates
let v1w = sm.node.convertPosition(sm.node.boundingBox.min,
to: self.sceneView.scene?.rootNode)
let v2w = sm.node.convertPosition(sm.node.boundingBox.max,
to: self.sceneView.scene?.rootNode)
//projected coordinates
let v1p = self.sceneView.projectPoint(v1w)
let v2p = self.sceneView.projectPoint(v2w)
//frame rectangle
let rect = CGRect.init(x: CGFloat(v1p.x), y: CGFloat(v2p.y),
width: CGFloat(v2p.x - v1p.x), height: CGFloat(v1p.y - v2p.y))
var frameOld = sm.marker.frame
switch sm.position
{
case .Top:
frameOld.origin.y = rect.minY - frameOld.size.height/2
frameOld.origin.x = rect.midX - frameOld.size.width/2
case .Bottom:
frameOld.origin.y = rect.maxY - frameOld.size.height/2
frameOld.origin.x = rect.midX - frameOld.size.width/2
case .Left:
frameOld.origin.y = rect.midY - frameOld.size.height/2
frameOld.origin.x = rect.minX - frameOld.size.width/2
case .Right:
frameOld.origin.y = rect.midY - frameOld.size.height/2
frameOld.origin.x = rect.maxX - frameOld.size.width/2
}
sm.marker.frame = frameOld
self.view.layoutSubviews()
비슷한 방법 당신이 여기 찾을 수 있습니다 Scene Kit: projectPoint calculated is displaced
그래서 마커가 기기 동작 중에 평면의 가장자리에 붙어 있기를 바랍니다. 그러나 문제가있다 : 장치를 회전 할 때 - 마커가 비행기에서 표류하는 것은 가장자리
문제의참조 비디오 : https://github.com/mgontar/SceneKitProjectionIssue
: 나는이 문제를 재현 GitHub의에 기본 프로젝트를 만든 https://youtu.be/XBgNDDX5ZI8
귀하의 답변은 정말 훌륭하고 완벽합니다. 감사합니다! –
그러나 한 가지 더 많은 문제가 있습니다. aroud를 180 도로 돌리고 마커가 표시되는지 확인하십시오. https://youtu.be/HzDMdsP_CQY –
@MaxGontar 버그를 재현하려면 육체 이동이 자주 발생하지 않습니다. 위의 응답을 수정 했으므로 이제는 정상입니다. – lock