问题:
我正在尝试创建一个矩形的SCNNode
。方向很重要。
1)在相机Z距离前面初始化(已完成)
和
2)保持其原始位置并跟随摄像机的位置,但是,该节点始终相对于摄像机面向“上”。因此,无论如何,如果有人看着该节点,则该节点在空间上是垂直的。
我的态度:
1)我已经完成了第1部分
func updatePositionAndOrientationOf(_ node: SCNNode, withPosition position: SCNVector3, relativeTo referenceNode: SCNNode) {
let referenceNodeTransform = matrix_float4x4(referenceNode.transform)
// Setup a translation matrix with the desired position
var translationMatrix = matrix_identity_float4x4
translationMatrix.columns.3.x = position.x
translationMatrix.columns.3.y = position.y
translationMatrix.columns.3.z = position.z
// Combine the configured translation matrix with the referenceNode's transform to get the desired position AND orientation
let updatedTransform = matrix_multiply(referenceNodeTransform, translationMatrix)
node.transform = SCNMatrix4(updatedTransform)
}
来自Position a SceneKit object in front of SCNCamera's current orientation。
2)我尝试了多种方法:
-将节点的旋转设置为摄像机
-设置节点相对于摄像机的方向
-使用SCNLookAtConstraint / BillBoardConstraint
BillBoardConstraint允许我编辑特定的轴,因此,我可以告诉它关闭.Z轴。但是,当我将节点向左移动90度时,
_
This Side | * | * = node; _ = positions around node
_
它实际上将节点旋转到横向模式。 (长底短边)。我需要它以保持直立。
关于如何保持矩形SCNNode(最初为纵向)保持纵向的任何指南,无论我如何看待它,以及如何随身携带相机?