问题标签 [scnnode]

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 投票
1 回答
2062 浏览

xcode - SceneKit:虽然在 Xcode 场景编辑器中工作,但无法以编程方式添加 SCNReferenceNode

在 Xcode 场景编辑器中添加 SCNReferenceNode 即可。但是,当使用下面的代码以编程方式完成时,场景中不会出现任何内容。

filePath包含由print语句证明的有效路径以及单步执行代码。

帮助?

0 投票
3 回答
894 浏览

ios - SceneKit:如何一起为多个 SCNNode 设置动画,然后调用完成块一次

目标是同时为多个 SCNNode 设置动画,然后在所有动画完成后调用完成块。并行动画具有相同的持续时间,因此如果一起开始,将同时完成。

这个 SO 答案建议使用groupSprite Kit 的功能,但 Scene Kit 中没有类似物,因为SCNScene该类缺少runAction.

一种选择是针对每个节点单独运行所有操作,并让每个操作调用相同的完成函数,该完成函数必须维护一个标志以确保它只被调用一次。

另一种选择是避免完成处理程序并在与动画持续时间匹配的延迟后调用完成代码。然而,这会在测试期间产生竞争条件,因为有时动画在完成之前就被暂停了。

不过,这似乎很笨拙。在 SceneKit 中对多个节点的动画进行分组然后调用完成处理程序的正确方法是什么?

0 投票
1 回答
1256 浏览

ios - SceneKit:在父级内垂直居中缩放 SCNNode?

目标是缩放 SCNNode 并将其垂直居中于其父级中。

但是,缩放 SCNNode 不会影响其边界框,并且计算缩放高度不起作用。如果没有准确的高度,如何将节点垂直居中于其父节点内?

为了说明使用缩放高度的问题,请参阅附件Tiki.dae。资产的原始高度(如边界框所示)为 324.36。但是,如果将 Y 比例设置为 0.01,则高度不会变为 ~3.24。它变得小于 3,您可以通过将其舒适地安装在高度为 3(半径为 1.5)的球体中来证明这一点。

下面的代码尝试将缩放节点置于其父节点的中心,但它不起作用。

注意:参考节点是来自 WWDC 2015 狐狸演示的狐狸/熊猫参考节点。

0 投票
1 回答
475 浏览

ios - 如何使用来自 Blender 的 .dae (COLLADA) 文件在 SceneKit 中创建用户生成的动画

我正在尝试为 SceneKit 中 SCNScene 对象的特定部分设置动画(在我的情况下,我想为手的手指设置动画)。我很容易从 Blender 中导入带有相应骨骼的 .dae (COLLADA) 文件,以在模型上生成关节。

我的目标是使用用户生成的 0 到 1 之间的值在 iOS 上为这些骨骼设置动画。想象一个 UISlider,您可以在其中来回滚动并看到特定手指根据滑块的值移动。

这是需要的动画截图

假装动画的图像

我尝试通过调用像 Apple 的 Fox 示例这样的动画文件来为模型设置动画:

问题是这是一个全局动画,而不仅仅是食指。此外,它始终是“预定义”动画,而不是由用户输入控制的动画。最终我想混合动画(例如同时移动食指和拇指显示手势)

这可能吗?我很挣扎,因为我不知道如何操作网格的特定部分。我开始研究 MetalKit,但我不清楚这就是解决方案。

任何帮助将非常感激。

0 投票
0 回答
307 浏览

ios - 几何渲染问题 - SceneKit

我有一组 SceneKit 自定义几何图形。渲染时,在某些视角下,它们看起来好像是透明的(可以透过它们的外表面看到后面的东西,或者可以看到内表面)。它们的材质透明度和封装节点的不透明度都设置正确。此外,它们中的一些相交并且它们的相交是完全可见的。关于可能是什么问题的任何想法?谢谢。

0 投票
1 回答
146 浏览

ios - SCNScene / SCNSphere 的可视区域

我有一个 SCNScene ,其中包含一个封装 SCNCamera 的 SCNSphere(相机位于 SCNSphere 的@中心内,在屏幕上显示其内壁)。

是否有查询方法或推断/计算该球体的可见区域的方法?我不想要以点为单位的屏幕区域或场景本身的区域,而是相机能够在给定设备的屏幕上从这个球体渲染的内容(ipad 和 iphone 确实显示了不同数量的 360 帧)

帮助表示赞赏。

0 投票
1 回答
152 浏览

ios - SCNAction.rotate 剪辑通过其他节点

我有一个节点(nodeCollection),它有一个 SCNNode 作为 childNode,它是这样创建的:

我也在创建 redbox 节点,如下所示:

然后我运行下面的代码来使节点旋转

然后我将 nodeCollection 和 redBox 作为 childNodes 添加到 SCNScene

但是正如您所看到的,当我在 nodeCollection 上执行旋转时,redBox 的物理特性不成立。 当红色盒子停下并停留在蓝色盒子上时,物理原理起作用

我怎样才能解决这个问题,以便当蓝色框旋转时,它不只是穿过 redBox

在此处输入图像描述

0 投票
1 回答
1595 浏览

ios - 如何将 SCNAction 和脉冲力应用于 SCNNode

嘿,我有一个球,可以通过施加力移动。我试图让它做的基本上是在它穿过空气到达目的地时,重力作用于它的因果效应。基本上,当“移动到”动作正在播放时,重力不会产生影响,因此它不会慢慢地落到地面上,而是移动到最终位置,然后当“移动到”动作停止时它会直接落下。对场景中的重力做。

我试图让球以弧线投掷并落在目标上?

代码:

现在这就是魔法发生的地方:

0 投票
1 回答
422 浏览

ios - SceneKit nodesInsideFrustumWithPointOfView:意外返回空

我正在使用以下方法来确定相机可以看到哪些 SCNNode。

然而返回的数组总是空的。我将场景设置如下:

在某个随机时间,在创建场景后,我在场景中添加了一个 SCNNode:

在我的设备上,节点“testnode”在我的屏幕上可见,但 nodesInsideFrustumWithPointOfView: 不返回任何内容。

编辑:我尝试将视点更改为聚光灯对象并测试“testnode”是否在其截锥体内。这是我在屏幕上看到的:http: //imgur.com/a/C3XGu然而数组仍然返回空。测试节点是白色立方体。

0 投票
1 回答
2281 浏览

scenekit - SceneKit:如何控制导入资产的大小,一个 DAE 文件创建巨大的 SCNNode 而另一个是“正常”

设计师提供了在Cinema 4D中创建的两个 DAE 文件

这两种资产在 Cinema 4D 中的大小相当。两个 DAE 文件都是使用相同的导出过程生成的。

但是,将 DAE 文件导入 SceneKit 场景会产生不同的结果。

Chango.dae 以“正常”大小导入,边界框约为 3x4x3。

Tiki.dae 以大约 155x325x140 的边界框导入巨大的尺寸。它在 C4D 内部的尺寸约为 122x283x142。

问题:

1) 你如何确保资产“适合”到 SceneKit 场景中?您是应该使用 SCNNode 的“缩放”属性来缩小资产,还是应该要求设计人员制作一定大小的资产?在SpriteKitUIKit中,这很简单。资产大小与其屏幕大小直接相关(例如,20x20 图标会占用多少屏幕空间,具体取决于分辨率)。但是,模拟是SceneKit什么?如果您希望资产适合 1x1x1 SCNNode,您要求设计师制作资产的尺寸是多少?

2)如果你的资产对于一个场景来说太大了,你如何缩小它?UIKit例如,您可以缩放图像以适应 a之UIView类的东西ScaleAspectFit。似乎没有SCNNode. 使用 SCNNode 的scale属性会改变外观,但不会改变资源的边界框。甚至改变外观也不精确。例如,对于 Tiki.dae,资产的原始高度(如边界框所示)为 324.36。但是,如果将 Y 比例设置为 0.01,则高度不会变为 ~3.24。它变得小于 3,您可以通过将其舒适地安装在高度为 3(半径为 1.5)的球体中来证明这一点。