问题标签 [scenekit]

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 回答
6394 浏览

objective-c - 使用 SceneKit 在 3D 空间中旋转 SCNode 对象

我正在尝试学习如何使用 SceneKit,例如,我想尝试使用 SDK 构建太阳能系统。我能够添加 SCNode 对象并配置其材质属性,例如图案和照明。此外,我能够旋转行星,但我似乎无法理解如何沿着特定路径“旋转”它们。

到目前为止,我的代码如下所示:

我在 AppleDocs 中的某处读到您需要在太阳坐标系中而不是在根节点中添加行星,但我不确定我是否理解正确。

让我知道你是如何做到这一点的。

0 投票
0 回答
84 浏览

ios - 从下边缘向上滑动时,SceneKit 应用程序转储

我最近正在使用适用于 iOS 的新 SceneKit 框架创建一个应用程序,我想知道一个奇怪的错误。因为我不知道是不是我造成了这个错误,所以我创建了一个新项目,它仍然存在。当 iPad(我正在使用物理测试设备)从“主页按钮侧”边缘滑动到屏幕中心时,它处于横向模式时才会发生这种情况。编译器提供以下信息:

2014-06-20 18:22:12.066 游戏 [727:60518] * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“* - [__NSSetM addObject:]:对象不能为 nil” *第一次抛出调用堆栈:( 0x2afea2bf 0x37ee0d2f 0x2af0aee5 0x2e846c97 0x2e5cd22b 0x2afb1e47 0x2afb1257 0x2afaf8bd 0x2aefcfb1 0x2aefcdc3 0x320782c9 0x2e62ca1d 0x7fd25 0x38461aaf) libc++abi.dylib: terminating with uncaught exception of type NSException

它可以在任何其他设备方向上正常工作。有谁知道如何解决这个问题?

0 投票
4 回答
10640 浏览

ios - 如何将scenekit背景的内容设置为立方体贴图

我正在尝试使用大约 6 个图像的数组将场景的背景内容设置为天空盒效果。

我已经以正确的顺序创建了图像数组,我知道我需要然后使用

但是,我正在努力弄清楚我如何以及在何处使用该类方法来返回包含立方体贴图的属性。

0 投票
1 回答
4228 浏览

ios - 如何在没有深度值的情况下使用 SceneKit 的 unprojectPoint 将 2D 点转换为 3D?

是否可以使用 SceneKit 的unprojectPoint将 2D 点转换为 3D 而没有深度值?我只需要在 XZ 平面中找到 3D 位置。Y 可以始终为 0 或任何值,因为我没有使用它。

我正在尝试为 iOS 8 Beta 执行此操作。

我对 JavaScript 和 Three.js (WebGL) 有类似的东西,如下所示:

但我不知道如何将带有 unprojectVector 的部分翻译为 SceneKit。


我想要做的是能够仅在 XZ 平面中拖动对象。垂直轴 Y 将被忽略。

由于对象需要沿平面移动,一种解决方案是使用 hitTest 方法,但我认为对于每个触摸/拖动事件都执行此操作在性能方面不是很好。此外,它也不允许物体移出平面。

我已经尝试了基于此处接受的答案的解决方案,但没有奏效。为 unprojectPoint 使用一个深度值,如果在 +/-Z 方向上拖动对象,则对象不会在手指下停留太久,而是会远离手指。无论拖动的对象在 XZ 平面中的哪个位置移动,我都需要让拖动的对象保持在手指下方。

0 投票
2 回答
3956 浏览

swift - 如何将 SCNFloor 的属性与 Swift 和 Scenekit 一起使用?

我不知道如何使用 Swift 从 Scenekit SCNFloor 类中访问属性,在 Objective-c 中,他们这样做是这样的:

这创建了地板,我如何访问“reflectionFalloffEnd”?

谢谢

编辑感谢您现在可以使用的快速响应:)

0 投票
0 回答
3193 浏览

ios - SceneKit 优化

我想显示相同的SCNGeometry1000 次,但使用特定的动画(例如用于旋转、移动等的 SCNActions)和不同的图像作为漫反射材料。

在检查文档和漂亮的 WWDC 演示文稿后,我发现创建一个节点的最佳方法是(所以它被称为 1000 次)

但是在 iPad Air 上,我只能达到 40 fps(当通过 SCNAction 使用更新 firstMaterial.diffuse.contents 的块为纹理设置动画时为 27 fps)

我认为使用 SKTextureAtlas (所以所有图像都在同一个纹理上)并使用相同的几何体(显然当你复制几何体时,数据是共享的 - cf Building a Game with sceneKit),我会得到更多的 fps 因为它应该允许 OpenGL 优化。我尝试使用 SceneKit 的很多参数,但没有成功。

通知:SceneKit 统计显示有 1000 个绘制调用,Xcode 中的 Graphics stats 是:cpu 18ms,GPU 是 22ms,tiler 18%,renderer 80%,device 88%(等不及新的 SceneKit 统计Xcode 中的模块!)

所以我的问题是:你认为这是正常的性能还是有办法优化我想在 SceneKit 中做的事情?谢谢!

编辑:实际上 SKTextureAtlas 似乎并没有优化渲染,但似乎降低了帧速率。如果我使用 UIImage 而不是来自 SKTextureAtlas 的 SKTexture,我有 25% 的改进(50fps)。使用 SKTextureAtlas 或 UIImages 对纹理进行动画处理(每 0.2 秒更新每个对象的纹理)确实会降低性能(20fps)。我想我在这里遗漏了一些东西,因为 SKTextureAtlas 通常用于优化。

0 投票
1 回答
969 浏览

cocoa - Swift 中的 SCNScene 问题:SCNView 中没有显示任何内容

我正在尝试在 Swift中执行此操作。但是我的 SCNView 没有显示任何内容。我检查了 IB 中的连接,一切都很好。我假设我在将源代码从Objective C转换为Swift时出错了。这是我的代码:

0 投票
1 回答
1760 浏览

swift - 如何使用 SCNSceneSource 方法 entryWithIdentifier:classType:?

我正在尝试从 DAE 文件中提取动画,如何快速使用此方法?

谢谢,

Objective-C 代码是:

//CAAnimation *animation = [sceneSource entryWithIdentifier:animationIDs[index] withClass:[CAAnimation class]];

0 投票
4 回答
9375 浏览

swift - 如何在我的 Scenekit.scene 之上创建 HUD

我正在试验 Swift 和 Scenekit。构建 Mac OS X 应用程序。让 3d 场景工作似乎很容易。但是没有某种 2D 高分、雷达显示、速度指示器等的场景是什么?我希望 SpriteKit 场景能够无缝集成到 SceneView 中,但我发现文档对此并不十分清楚..

我能想到的最明显也是唯一的方法是将 SKView 放置在 SceneView 上并分别渲染。但是有没有更优雅的方式呢?

0 投票
1 回答
997 浏览

objective-c - SceneKit 模型的恒定旋转

我从外部设备以 10 倍/秒的速度获取加速度计数据,我希望将其反映在 3-D SceneKit 模型上。也就是说,我希望模型旋转以响应加速度计数据。3-D 模型是在 SketchUp 中构建的 .dae 文件,我将其加载到 SceneKit 场景中。

我目前正在尝试在 SceneKit 场景的根节点上进行旋转(这里self指的是自定义SCNView类):

self.scene.rootNode.transform = CATransform3DMakeRotation(angle, x, y, z);

这有几个问题:

  • 它不是沿每个轴旋转特定量,而是沿某个向量旋转固定量。是否可以通过更改相对向量值来控制某个轴旋转多少度?用三个 s 实现一个变换是否有意义CATransform3DRotate,每个轴一个?
  • 它每次都会创建一个新的旋转,而不是仅旋转与上次读数的角度差。例如,如果加速度数据是x: 60˚, y: 40˚, y: -30˚上次读数并且现在是x: 65˚, y: 45˚, y: -35˚,则模型将沿 x 轴旋转完整的 65˚,而不仅仅是与上次的 5˚ 差异(应该如此)。通过从当前读数中减去最后一个读数,这似乎很容易解决,但我不确定数学如何与旋转有关。