SceneKit/ARKit:将屏幕形状映射到3D对象

问题描述:

我在屏幕中间有一个UIView,在这种情况下为100x100,它应该像用户的“目标”准则一样工作。SceneKit/ARKit:将屏幕形状映射到3D对象

当用户按下添加按钮时,应该在同一个地点添加一个SCNBox,宽度/高度/比例/距离/旋转对应于屏幕上的大小和位置UIView

This image可能有助于理解我的意思。

UIView的大小可能会有所不同,但它将始终是矩形的并且居中在屏幕上。相应的3D模型也可能会有所不同。在这种情况下,方形UIView将映射到一个方框,但稍后可以将相同方形的UIView映射到具有相应直径(宽度)和高度的圆柱体中。

任何想法,我可以实现这样的事情?

我试过报废UIView并将该框作为占位符,作为sceneView.pointOfView的子项,后来将其位置/父项转换为rootNode,但没有运气。

谢谢!

获取UIView在其父视图中的中心位置,并使用SCNRenderer的unprojectPoint方法将其转换为场景中的3D坐标,以获取3D pbject应放置的位置。你将不得不实施一些手段来确定z值。

很明显,物体的距离将决定其在屏幕上的大小,但如果您还想缩放物体,则可以使用相机的缩放级别的倒数作为比例。对于缩放级别,我的意思是您自己的缩放方式(例如,将相机移动得比默认距离更近会生成更小的缩放模型)。如果UIView的大小发生变化,您可以另外或取代中心点将其所有角点单独投影到3D空间,但将UI视图的比例转换为3D节点的比例可能会更容易。例如,如果您知道UIView的最大尺寸,您可以将其视为最大尺寸的百分比,并使用相同的百分比来缩放对象。

你还提到了对象的旋转应该对应于UIView。我认为这意味着你想让物体面对相机。为此,您可以根据pointOfView节点的.transform属性对对象应用旋转。