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

时间:2017-09-22 17:44:04

标签: ios swift 3d scenekit arkit

我在屏幕中间有UIView,在这种情况下为100x100,它应该像用户的“目标”指南一样运行。

当用户按下“添加”按钮时,应在完全相同的位置添加SCNBox,宽度/高度/比例/距离/旋转对应UIView的大小,在屏幕上的位置。

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

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

我有什么想法可以达到这样的目标吗?

我已尝试删除UIView并将该框作为占位符,将其作为sceneView.pointOfView的子项,稍后将其位置/父级转换为rootNode,运气。

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

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