我在SceneKit場景的中心位置(0,0,0)有一個攝像機 我正在旋轉攝像機y軸顯示場景的不同部分。如何確定ScnNode是否在SceneKit中攝像機節點的視圖方向的左側或右側
我想在屏幕的左側/右側顯示箭頭,以顯示用戶必須移動以查看目標對象的方向。
如何計算ScnNode是否位於我的視圖方向右側的左側?
我知道:相機節點的
- 位置和旋轉
- 目標節點的位置
我在SceneKit場景的中心位置(0,0,0)有一個攝像機 我正在旋轉攝像機y軸顯示場景的不同部分。如何確定ScnNode是否在SceneKit中攝像機節點的視圖方向的左側或右側
我想在屏幕的左側/右側顯示箭頭,以顯示用戶必須移動以查看目標對象的方向。
如何計算ScnNode是否位於我的視圖方向右側的左側?
我知道:相機節點的
例如,
let v = CGPoint(x: nodePosition.x - cameraPosition.x, y: nodePosition.y - cameraPosition.y);
let a = atan2(v.y, v.x) // Note: order of arguments
角度以弧度表示,範圍介於-π和π(-180至180度)之間。如果該值爲負值,則該節點位於攝像機向量的左側,正值表示該節點向右,零表示節點向前。
如果需要,可以方便地使用此角度來實際執行旋轉。只需將相機角度增加一點到節點的角度即可。
E.g.
cameraRotation += a * 0.1
注意事項:
沒有與projectPoint funcion魔女一個簡單的方法顯示圖像在您的視圖的2D元素,並根據它在哪裏可以找到該用戶應該
let sceneWidth:CGFloat = self.sceneView.frame.width
getIfHeIsLookingNew(sceneWidth: sceneWidth, nodePosition: self.sceneView.projectPoint(targetNode.position))
func getIfHeIsLookingNew(sceneWidth: CGFloat, nodePosition: SCNVector3){
if(nodePosition.z < 1){
if(nodePosition.x > (Float(sceneWidth))){
print("Look Right")
}else if(nodePosition.x < 0){
print("Look Left")
}else{
print("Correct")
return
}
}else if(nodePosition.x < 0){
print("Look Right")
}else{
print("Look Left")
}
}
}
這工作。謝謝! – Stefan