Sprite kit 带有SceneKit的ARKit广告牌效果

Sprite kit 带有SceneKit的ARKit广告牌效果,sprite-kit,scenekit,ios11,arkit,Sprite Kit,Scenekit,Ios11,Arkit,我希望添加与此应用程序类似的公告牌效果: 我希望使用SCNText几何体的SCNodes始终面向摄影机 我尝试过但没有成功: SCNLookAtConstraint以sceneView.pointOfView为目标,但这会将节点旋转到远离摄影机的方向,导致文本向后,并且无法更改节点位置或euler角度 开箱即用,SKLabelNode将始终面向ARKit中的相机,这正是我想要的,除了使用SCNText。您应该签出 更新代码 let textGeometry=SCNText(字符串:“Hell

我希望添加与此应用程序类似的公告牌效果:

我希望使用SCNText几何体的SCNodes始终面向摄影机

我尝试过但没有成功:

  • SCNLookAtConstraint以sceneView.pointOfView为目标,但这会将节点旋转到远离摄影机的方向,导致文本向后,并且无法更改节点位置或euler角度
开箱即用,SKLabelNode将始终面向ARKit中的相机,这正是我想要的,除了使用SCNText。

您应该签出

更新代码

let textGeometry=SCNText(字符串:“Hello,World!”,extrusionDepth:1.0)
textGeometry.font=UIFont(名称:“Arial”,大小:2)
textGeometry.firstMaterial!。diffuse.contents=UIColor.red
设textNode=SCNNode(几何体:textGeometry)
//将对象的轴更新到其中心
// https://stackoverflow.com/questions/44828764/arkit-placing-an-scntext-at-a-particular-point-in-front-of-the-camera
let(最小,最大)=textGeometry.boundingBox
设dx=min.x+0.5*(max.x-min.x)
设dy=min.y+0.5*(max.y-min.y)
设dz=min.z+0.5*(max.z-min.z)
textNode.pivot=scnmarix4maketranslation(dx、dy、dz)
textNode.scale=SCInvector3(0.01,0.01,0.01)
让平面=SCN平面(宽度:0.2,高度:0.2)
设blueMaterial=SCNMaterial()
blueMaterial.diffuse.contents=UIColor.blue
plane.firstMaterial=blueMaterial
让parentNode=SCNNode(geometry:plane)//此节点将保存文本节点
设yFreeConstraint=SCNBillboardConstraint()
yFreeConstraint.freeAxes=.Y//可选
parentNode.constraints=[yFreeConstraint]//将约束应用于父节点
parentNode.position=SCInvector3(0,0,-0.5)
parentNode.addChildNode(textNode)
sceneView.scene.rootNode.addChildNode(parentNode)//将文本保持器添加到场景中
似乎将billboard约束直接应用于文本节点会重置其位置和比例,因此文本节点变得巨大,并相对于摄影机定位在0,0,0。不知道为什么:(但将约束应用于父节点效果很好。

您就快到了

只需修改文本节点的轴即可将其旋转180度(Obj-C)


谢谢!这正如预期的那样起作用。我以前尝试过旋转和旋转,但都不起作用。你可能想查看太多,而不是SCNLookAtConstraint。对我来说,这似乎是一个比使用查看约束+旋转更好的解决方案,但由于某些原因,我无法让
textNode
显示在场景中。My
textNode
也不会出现在
SCNBillboardConstraint
中!有人运气好吗?我想应该是:
billboardConstraint.freeAxes=[.Y]
试试这个
node.pivot = SCNMatrix4MakeRotation(M_PI, 0, 1, 0);