Scenekit scnbillboard和lookatconstraints冲突

问题描述 投票:0回答:1

我正在尝试将一个带有箭头的圆圈指向场景工具箱中一个scnnode的顶部,但始终将其约束或保持朝向视点的平面。看一下约束,广告牌约束似乎被忽略了。

这里是约束的设置:

let billboardConstraint = SCNBillboardConstraint ()
billboardConstraint.freeAxes = SCNBillboardAxis.Y 

let lookatConstraint = SCNLookAtConstraint ( target: targetNode )
lookatConstraint.localFront = SCNVector3Make ( 0, 1, 0 )
lookatConstraint.worldUp = SCNVector3Make ( 0, 1, 0 )

arrowNode.constraints = [billboardConstraint, lookatConstraint]

self.sceneView.pointOfView?.addChildNode ( arrowNode )

以下是问题的示例图片。第一张图片是我要保留的方式,第二张图片显示了我似乎无法控制的展平:

Ok

NOT OK

无论我尝试什么,它都不会一直面对相机。我尝试将箭头节点和目标节点的z距离均等化(仍然不希望地旋转箭头节点),尝试设置万向节锁定(将箭头节点翻转出去),尝试调整箭头节点的角度以保持它“面向”观点,并尝试使用SCNCone作为指针。

我还尝试将这个箭头节点移动到叠加层中的图像视图中,并在Scenekit中使用一个不可见的箭头节点,但是在尝试CGAffineTransform 2d UIImageView时无法正确地进行数学运算。我尝试获取具有SCNLookatConstraint的SCNNode的旋转矢量,尝试了projectpoint等。也许我应该在中学时多加注意:-(

任何人有任何想法:

scenekit
1个回答
0
投票

[这篇文章:59251351-就像一个带有管子的3d盒子(带枪的坦克),它瞄准一个特定的节点-“瞄准”它。那是您的箭头,因此首先-确保从一开始就将其设置为正确的旋转角度,否则它将永远无法工作。 Arrow应该是一个子节点,以便在设置主节点的约束时主节点和所有子节点一起旋转。

该示例是相关节点的固定-z,并且视点不变。假设您想向前移动相机,则需要一种方法来保持透视-将所有相关对象的Z保持在与相机相同的距离处。

因此,如果您的目标节点和指示器可以保持在同一z距离平面上(如您在示例中所指出的那样,它可以那样工作),我“认为”这应该有所帮助。您可以将目标节点设置为与错误节点相比稍微偏离z,这有些不重要,例如.001-只是为了使lookAt数学实际上不会返回(NAN),尽管有些偶然。

如果比这更复杂,则需要具有更多数学技能的人。希望有帮助

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.