问题标签 [scnvector3]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
6098 浏览

ios - 如何将 SCNVector3 位置转换为 CGPoint SCNView 坐标?

我有这个只适用于横向的应用程序。

我在场景包上有一个对象。该对象位于特定位置,由以下方式指定:

现在我需要将其转换SCNVector3mainView2D 坐标,其中

场景使用正交相机,所以没有透视。摄像头是默认摄像头。没有旋转,没有平移。相机的 orthographicScale 为 5.4。

我该如何转换?

我在 SO 上找到了关于反向问题的其他答案,即从 CGPoint 转换为 SCNVector3,但对我来说,如何从 SCNVector3 转换为 CGPoint 听起来并不明显。

如果 SCNView 是 UIView 的子类,则 (0,0) 是左上角,而在 iPhone 6 横向的情况下,(667, 375) 是右下角。

我的这个按钮几乎在高度的右侧和中间。就 UIKit 而言,我会说这个按钮位于 (600, 187) 但是当我这样做时:

我得到 projectPoint 等于 (7.8, 375, 0) (?)

当我使用 UIKit 将 10x10 视图添加到坐标 (7.8, 375) 时,我会在左下角看到一个视图!

就像我说的那样,该应用程序仅在横向运行,但这些坐标系都一团糟。

0 投票
0 回答
703 浏览

ios - 如何使子节点和父节点的 SCNNode 位置相同?

我有一个名为 wc 的子节点的场景。我想在该节点上添加 dae/model 文件。

我可以通过以下方式添加模型/dae:

  1. 使用捆绑包中的 dae 资产创建父场景
  2. 将父场景添加到 scnView 并将其类型转换为 self.view
  3. 获取要添加 dae 的所需节点。
  4. 使用所需的节点 dae 创建一个子场景。
  5. 将子场景根节点添加为父场景所需节点的子节点。
  6. 将子节点的位置设置为父场景所需节点的位置。

以下是片段:

代码片段(在 viewDidLoad 中)

日志输出

wcNode 位置 275.306549, 157.163620, 0.956176

DAE 位置 284.000000, 160.000000, 0.959596

正如您在上述日志输出中看到的,所需节点及其子 Dae 节点的位置不同,这会导致模型在场景中移动。

为什么职位不一样?

我如何补偿这种转变?

0 投票
1 回答
304 浏览

ios - 如何检测scenekit中是否触摸了SCNBox?

如何检测scenekit中是否触摸了SCNBox?我正在构建一个 VR 应用程序

0 投票
0 回答
15 浏览

ios - 检测我在 iphone sdk 中显示的模型 .obj 中选择了哪些坐标

我有一个可以在 SCNView 中显示的 OBJ 文件。我需要一些方法来检测我在显示的模型中选择的坐标。想要选择特定选择。

0 投票
0 回答
216 浏览

ios - Google Vision,使用 SceneKit 创建面罩

我正在用 Objective-C 开发一个 iOS 应用程序,我需要在检测到的人脸(使用 google vision 的系统)上应用一个 .scn 文件。在使用存储在节点中的 3D 对象设置 SceneView 后...我需要将其应用到面部:

问题是“?”,因为我作为参数输入的值应该使用用户面部和设备之间的距离来计算......但我应该如何得到它?这是我想要做的正确的事情,还是推理有什么问题?

0 投票
0 回答
905 浏览

ios - 在sceneKit中将CGPoint从视图转换为SCNVector3

我正在将AVFoundation用于前置摄像头视图。从前置摄像头,我使用视觉框架从每一帧中检测脸。由此,我可以得到鼻子的 CGPoints。现在,我想使用 sceneKit 视图在其中一个鼻子点上添加一个 3D 对象,并且我想将这些鼻子 CGPoint 转换为 SCNVector3,以便我可以将位置提供给 3D 对象。

0 投票
0 回答
986 浏览

ios - Swift 场景套件:将 SCNNode 移动到点击位置?

好的,在这里使用 Swift 中的 ARKit 并尝试掌握这一点 -

对于我的游戏控件,我希望能够控制当用户的手指在屏幕上向下时 SCNNode 正在移动的点(3d 空间中的位置),这意味着由 touchesBegan 函数开始。

我希望它像 Apple 的狐狸游戏一样带有操纵杆,但在 AR 中:https ://developer.apple.com/library/content/samplecode/Fox/Introduction/Intro.html

我的主要问题是,我的 SCNAction 的移动位置似乎没有在 touchesMoved 上正确更新,而且我需要 SCNNode 以相同的速度移动到该位置,无论它有多远。

这是我所拥有的,它正在工作但不正确:

walkAction 只是一个定义的 SCNAction。我该如何解决这个问题,以便节点向用户手指在屏幕上的任何位置运行(转换为 AR 点)?

0 投票
1 回答
189 浏览

swift - 在 Swift 中使用 UserDefaults 保存 SCNVector3 的值

我正在尝试保存和加载一个SCNVector3,这是我用来保存和加载向量的代码:

我必须检查该值是否已保存,因为我在按下按钮时保存该值并在加载应用程序时加载它。

问题是应用程序在保存矢量时崩溃。
但是,如果我像这样将向量分成三个浮点数:

然后像这样加载它们:

该应用程序不会崩溃。

我可以在应用程序崩溃且不将其分成 3 个浮点数的情况下保存矢量吗?

0 投票
1 回答
989 浏览

scenekit - 在 Swift 中使用 Float 创建一个 SCNVector3 数组

我在数组中有一堆 Z 坐标。我想使用这些值创建几何,因此我创建了一个 SCNVector3 数组。X 和 Y 值将使用简单的嵌套循环计算,但 Z 值将来自我的数组。

Xcode告诉我:无法将类型'(x:Float,y:Float,z:Float)'的值分配给SCNVector3

我在这里犯了一个愚蠢的错误吗?

我现在的代码是:

0 投票
1 回答
614 浏览

ios - 在 ARSCNView (Swift) 中获取 CGPoint 的世界坐标

问题

我希望以下函数返回由轻按手势处理的点的世界坐标。我已经正确地实现了它(使用一些在线资源)来处理框架的中心点,但是我无法在屏幕上移动这个点。


试图

这是 的完整注释和工作代码getScreenCoordinates,它返回一个元组,其中包含 (0) 屏幕坐标的方向向量和 (1) 屏幕坐标的位置向量。screenCoord问题是通过参数传入的中心以外的点进行这项工作。


所需的解决方案

提供一个修改后的getScreenCoordinates函数,该函数返回相同的数据类型,但它不是获取相机框架中心点的世界坐标,而是获取screenCoord.