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

objective-c - SceneKit 中的自定义动画属性

我知道可以在 Core Animation 中创建自定义动画属性,但是在 OS X 10.8 的 SceneKit 框架中呢? SCNAnimatable似乎没有公开CALayer用于使属性可动画化的相同 API。

在我的应用程序中,我有一个SCNNode名为 的子类Starfield,我使用SCNNodeRendererDelegate. Starfields 公开了一个GLfloat名为warpFactor:

但是当我尝试向它添加动画时,如下所示:

我在控制台中得到以下信息:

我知道 SceneKit 是全新的,但有没有人碰巧知道如何使它工作?

0 投票
2 回答
2519 浏览

macos - 场景套件动画

任何人都知道为什么我不能让这个简单的动画工作?它只是不玩。

我认为问题是...

干杯

0 投票
2 回答
1920 浏览

scenekit - Scene Kit 覆盖 SCNNode 渲染

我已经查看了看起来很容易使用的 Scene Kit。有一种方法可以覆盖 SCNNode 的渲染,这很好。问题是我想在默认渲染旁边渲染其他元素。当我覆盖 SCNNodeRendererDelegate 中的渲染时,它不再渲染例如附加到它的几何图形。假设我想在顶部渲染几何体的线框、边界框或 2dtext。有什么建议么?

0 投票
2 回答
3901 浏览

macos - 暂停 SceneKit 动画

我正在尝试创建一个测试应用程序,用户可以在其中通过单击 SceneView 来暂停动画。SceneView 从在 3d 应用程序 (Cinema 4D) 中创建的 .dae 文件加载动画。该应用程序在启动时成功播放并循环播放动画。

为了暂停动画,我使用了技术问答 QA1673作为参考。对于这个 .dae 文件,动画实际上是作为动画的层次结构出现的,因此我尝试深入到每个底层 CAKeyframeAnimation 并将其速度设置为零。我的代码目前如下所示:

当我设置断点时,我可以看到关键帧动画的速度确实从 1 变为 0,但动画在场景视图中继续以正常速度播放。我最初尝试将顶级 CAAnimationGroup 的速度设置为零,但这也没有效果。暂停正在进行的动画的正确方法是什么?

0 投票
1 回答
841 浏览

macos - 如何在 SceneKit 中获取纹理的文件名

我想在 MacOS 上使用 SceneKit 来加载 Collada 文件并获取场景节点属性以将它们与我自己的场景图一起使用。

我可以轻松访问顶点、法线、变换矩阵、材质属性等等——除了纹理文件名之外的所有内容。

我希望纹理的文件名存储在 SCNMaterialProperty 类的实例中。从文档中:

SCNMaterialProperty 类封装了一个纹理和一组属性,这些属性指定了如何将纹理应用到对象上。

但我只能得到一个代表纹理的 NSImage,而不是源文件名本身。

它必须在某处 - 在 XCode 的 collada 查看器的检查器中,文件名也会显示(以及来自 SCNMaterialProperty 的属性):

在此处输入图像描述

如何在 SceneKit 对象图中访问纹理的文件名?

0 投票
3 回答
4135 浏览

macos - SceneKit 平滑相机移动

SceneKit(OpenGL)中平滑相机移动的标准方法是什么?手动更改 x,y 不够平滑,但使用 CoreAnimation 会创建“脉冲”运动。SceneKit 上的文档似乎非常有限,因此任何示例都将不胜感激,我目前正在这样做:

0 投票
1 回答
1286 浏览

cocoa - 改变 SCNRenderer 的 PointOfView

我正在从具有特定角度的场景创建 SCNRenderer。我正在使用 SCNView 使我的观点可见,并且当对象场景看起来像我想要它时,我在离线 openGLContext 中渲染它以从中制作图像。这是相关的代码:

我发现视点的克隆使渲染器以与 SCNView 完全相同的方式渲染场景。完美,到目前为止。

现在我想调整观点。例如,我想将旋转设置为独立于场景视图的值,假设为 0。所以,我这样做:

在打电话之前[lRenderer render],这不会改变任何事情。

我在 lRenderer.pointOfView 上更改的任何属性似乎都无关紧要。但是,如果我省略了lRenderer.pointOfView = [self.sceneView.pointOfView clone]渲染器从默认角度而不是 self.sceneView 的角度渲染的线,那么在克隆的 SCNNode 中必须有一些我可以在 lRenderer.pointOfView 上更改的东西会产生影响?

0 投票
2 回答
5659 浏览

objective-c - 带有数千个对象的 OS X 上的 SceneKit

我正在关注本教程:http ://blog.bignerdranch.com/754-scenekit-in-mountain-lion/

我对使用 Scene Kit 很感兴趣,但我的场景可能有数千个球体。为了对 Scene Kit 进行压力测试,我尝试了这个:

例如,这适用于 1000 个球体 (10^3)​​,但对于 1,000,000 个球体 (100^3) 则失败(可能不足为奇)。我不介意不能使用一百万个球体,但我想弄清楚合理的上限是多少(5,000?15,000?)以及如何增加它。

我能做些什么来减轻这种情况?例如,我尝试了 sphere.segmentCount = 3,虽然这可以加快渲染速度,但它对内存使用没有太大影响,我怀疑这是限制因素。

此外,似乎没有 SCNPoint 类。我正在考虑在球体数量过多时切换到仅显示一个点,但是我无法从 SceneKit 文档中看到如何显示一个简单的点——我能看到的最简单的是一个三角形。

任何帮助深表感谢。

编辑: @toyos 建议将 SCNSphere 对象合并到单个 SCNGeometry 对象中(前提是它们不需要独立动画,它们不需要),但我找不到一个简单的方法来做到这一点。

SCNGeometry 是通过使用此处[SCNGeometry geometryWithSources:(* NSArray)sources geometryWithElements:(* NSArray) elements]记录的方法创建的,但我不清楚如何从我的球体创建对象。SCNGeometry

例如对于单个球体,我可以看到使用sphere.geometryElementCount来获取元素的数量,然后使用它来填充一个数组,使用[sphere geometryElementAtIndex:(NSInteger)elementIndex]它会给我元素,但我不确定如何获取“源”(或者它们甚至是)。获取几何源的方法是[sphere geometrySourcesForSemantic:(NSString*) semantic],但是这个语义字符串是什么?(它的意思是“法线”或“顶点”还是别的什么?文档很有帮助地说语义是“几何源的语义值。”没有说明语义的可能值是什么)

这只是针对单个球体,这将是毫无意义的(因为无论如何SCNSphere只是一个子类SCNGeometry),所以现在我必须添加多个球体。那么在将球体的顶点添加到我的SCNGeometry对象时,我是否必须手动平移它们?

我只是想找出最明智的方法来做到这一点。

0 投票
2 回答
273 浏览

objective-c - 在所有符合协议的类上实现一个类别

我在 SCNRenderer 上写了一个类别,添加了一些相机实用程序方法。这些相同的方法对 SCNView 和 SCNLayer 同样有用。与此类别相关的所有三个类都符合 SCNSceneRenderer。是否可以编写一个不适用于特定类但适用于所有符合特定协议的类的类别?

0 投票
3 回答
2168 浏览

cocoa - Scene Kit 的枢轴矩阵的语义是什么?

我正在努力理解 Scene Kit 使用节点的变换相关属性的语义。特别是,节点上的 pivot 属性不是一个点,而是一个完整的变换矩阵,我在 Collada 规范或其他文档中没有找到任何可比较的参考。

有没有人有使用 Scene Kit 中的枢轴矩阵或具有类似语义的属性的经验?有人可以提供有关如何使用它的简要说明/示例或指向相关文档的指针吗?它看起来像是一种潜在有用的方法,但如果我可以避免它,我宁愿不必对它进行逆向工程。

编辑:根据 OMZ 的响应,看起来枢轴可能只是变换树中的另一层。但是,如果是这样的话,它与仅仅添加一个中间节点有什么不同呢?确定在哪里应用哪些转换的依据是什么?