问题标签 [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 投票
6 回答
4862 浏览

swift - 有没有办法总是在别人面前画一个 SCNNode?

我一直在尝试使用场景工具包制作一个场景,其中指定的对象总是在其他对象的前面,尽管它实际上在其他对象的后面。在blender中使用的效果与此类似。

显然,blender 使用 GUI 和大量数学来转换其他 2D 对象,但我需要在具有 SCNGeometry 的 SCNNode 中使用此效果,换句话说,当前位于场景中的 3D 对象。

我考虑过使用类别掩码,但在阅读了 Apple 的文档后,我意识到这对我正在寻找的效果不起作用。

有谁知道在 SceneKit 中这样做的方法?或者更好的是,甚至有可能做到这一点吗?

非常感谢大家,现在以及我从 StackExchange 获得的所有其他帮助!

0 投票
1 回答
1052 浏览

ios - 自定义 SceneKit 角色无法正确克隆

我以编程方式创建了一个完全自定义装配的 SCNNode。该节点包含自定义几何体、作为子节点层次结构的骨架装备和用于将骨架和几何体绑定在一起的 SCNSkinner 对象。问题是这样的:一旦我克隆了我的自定义节点,它就会失去几何和骨架之间的绑定。

为了找到这个问题的根源,我用我能想到的最简单的几何结构组合交换了我相当复杂的角色节点:12 个顶点的几何块和 3 个关节的骨架结构。

在这一点上,我很想分享一张图片,但因为我没有足够的声誉,所以不能这样做,但是......

只要我直接将它添加到我的场景中,这个自定义 SCNNode 就可以完美运行。现在,在我当前的应用程序中,我需要多次将此节点添加到场景中。这就是为什么我需要克隆节点并将生成的克隆添加到场景中。但是克隆自定义节点的结果是非常错误的。正如我上面提到的,几何和骨架之间的绑定似乎丢失了。克隆节点中的骨架仍然可以定位在我的场景中,但几何不再跟随骨架位置或变换。

我已经尝试过的:

1.) 我创建了一个新节点并向其添加了原始几何图形的副本。然后我克隆了骨架根节点并将其添加到新节点中。最后,我将原件剥皮器设置为新节点剥皮器。不幸无济于事。结果的行为与直接克隆的节点完全相同。

2.) 在尝试重新创建几何体和骨架之间的绑定时,我创建了 SCNSkinner 的深层副本,并使其成为新节点的蒙皮器。但这只会导致 C3DSourceAccessorGetMutableValuePtrAtIndex 崩溃,我无法修复。

0 投票
2 回答
2572 浏览

uibezierpath - SceneKit 绘制曲线

我想用 SceneKit 画一条贝塞尔曲线,并认为这会起作用:

但是我的结果是这样的截图:SceneKit 渲染

有谁知道为什么 curveTo 控制点被忽略或如何打开它们?或者在 SceneKit 中绘制曲线的任何其他方法?

  • 编辑将路径坐标更新为:

    path.moveToPoint(CGPoint(x: -20, y: -20)) path.addCurveToPoint(CGPoint(x: 20, y: 20), controlPoint1: CGPoint(x: 10, y: 0), controlPoint2: CGPoint(x : 10, y: 0))

我可以得到这个:弯曲

但是我想我不想填充形状。理想情况下,弯曲的管状线是我在这里想要实现的。(想象一下电源线或类似的东西......)。我想我很想拥有相当于 SCNLine 或 SCNTube 的“在贝塞尔路径上渲染”

0 投票
1 回答
243 浏览

ios - collada 文件 node.geometry 中的 SCNScene 为 nil

问题出在标题中。我需要访问SCNGeometryaSCNNode然后编辑 a 的SCNMaterial集合,SCNGeometry但是当我检查节点时,几乎所有它的属性都设置为nil包括该geometry属性。奇怪的是,所有节点都已从.dae文件中加载,并且在场景中都渲染得很好。任何见解将不胜感激。

0 投票
1 回答
756 浏览

ios - SceneKit 中的第三人称相机

我需要将 a 附加SCNCamera到 aSCNNode以便每当节点(球)移动时,相机都会跟随它。

到目前为止,我设法通过在物理更新时不断移动相机来做到这一点,但它不是很有效并且有一些延迟。

我阅读了一些关于SCNTransformationConstraint可以将相机“附加”到节点的信息,但我没有找到有效的示例。

我不能只将相机附加到节点上,因为我想调整相机的位置。

谢谢。

编辑:(致小胡子)

我尝试使用:

但我收到一条错误消息:Extraneous '_' in parameter: 'rendered' has no keyword argument name

编辑2(工作):

在 Moustach 的建议下,我们能够有效地完成这项工作。

相机位置现在更新为:

此外,SCNNode还创建了一个新的作为相机节点的 rootNode 来保持其位置。

设置相机现在看起来像这样:

现在相机移动功能看起来像这样:

0 投票
1 回答
1414 浏览

arrays - 如何在swift中创建一个SCNNode数组

我想创建一个基金来创建一个节点数组。我的声明如下:

运行代码时,“spheres[i] = SCNNode(geometry: sphereGeometry)”行出现编译器错误。请帮忙。

0 投票
3 回答
3104 浏览

ios - cameranode随着iOS设备移动而旋转

这是 360 度视频播放器项目。

我在根节点中添加了一个cameranode(SCNNode),cameranode被放在了的中心(0,0,0)SCNSphere,它现在可以播放视频了。

现在我必须使用 devicemotion。当设备移动时,我需要旋转相机。不只是旋转某个角度。(不只是设备移动,当我拿着设备时,我的移动被认为是设备移动。因为我发现如果我使用deviceMotion.attitude.roll,cameranode只有在设备自己移动时才会移动,而不是当我带着设备转圈时)

当设备位于 (x1,y1,z1) 位置时,cameranode 会随着设备的移动而旋转,当设备再次位于 (x1,y1,z1) 位置时,视图应该与我们离开的最后一个相同.

这是我所做的:

数学可能是错误的,我不知道为什么要除以 60,但它似乎是我使用时需要的最接近的值[self.cameraNode runAction:[SCNAction rotateByX:-tempY y:tempX z:tempZ duration:0]];

问题来了?

  1. 我应该使用哪些数据?

CMGyroDataCMDeviceMotion。如果使用CMDeviceMotion,我应该使用哪个特定值?deviceMotion.attitude, deviceMotion.attitude.quaternion,deviceMotion.gravity

  1. 旋转相机节点的正确方法是什么?有很多方法,我不确定。

+ (SCNAction *)rotateByX:(CGFloat)xAngle y:(CGFloat)yAngle z:(CGFloat)zAngle duration:(NSTimeInterval)duration;

+ (SCNAction *)rotateToX:(CGFloat)xAngle y:(CGFloat)yAngle z:(CGFloat)zAngle duration:(NSTimeInterval)duration;

0 投票
2 回答
2002 浏览

swift - SceneKit 相机动画移动和减速

我正在使用以下代码沿 z 轴移动我的 SCNScene 场景的相机节点:

我想给一个事件(比如我的游戏触发的 GameOver 事件)来平稳地减速相机直到停止它。

怎样才能平稳停止移动相机?

0 投票
1 回答
1504 浏览

xcode - Xcode 7 SceneKit 对象的位置属性在移动时不会更新?

所以我正在制作一个游戏,在上述游戏中,你将使用 DPad 在场景中移动你的球。我正在使用 Xcode 7 Beta 5,尽管在 beta 4 中也存在同样的问题。这是测试视图控制器的代码:

颜色数组在其他地方使用, i 变量仅用于调试,如您在 UpdateCamera 函数中所见。这一切看起来都不错,但这是我在 Xcode 中的输出,显示了我遇到的问题的根源,即相机根本没有移动:

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 50

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 51

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 52

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 53

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 54

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 55

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 56

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 57

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 58

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 59

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 60

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 61

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 62

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 63

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 64

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 65

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 66

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 67

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 68

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 69

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 70

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 71

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 72

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 73

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 74

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 75

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 76

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 77

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 78

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 79

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 80

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 81

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 82

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 83

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 84

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 85

玩家位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0) 摄像机位置 SCNVector3(x: 0.0, y: 1.5, z: 0.0)

但是在我的设备上,我看到球落在地板上(在 scn 文件中制作)并按预期行事。唯一的问题是我无法访问玩家的实际位置,因此无法移动我的相机。

我尝试过使用变换而不是位置,但这也不起作用。请帮忙!提前致谢!

0 投票
3 回答
6453 浏览

xcode - 将背景图像添加到 ScnScene

我有一个使用 SpriteKit 和发射器粒子 (sks) 的应用程序,我发现它不像场景套件的粒子 (scnp) 那样逼真。所以我希望将其合并到 SKScene 中,但我不确定这是否可能。所以我决定创建一个 SCNScene 和粒子(scnp)。但是我想添加一个背景图像,唯一的 3D 效果就是粒子。谁能帮我为我的 SCNScene 设置背景图像。传统上我会像这样将它添加到 SKScene 中,但我无法在线找到 SceneKit 的任何帮助。

先感谢您