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

math - 如何计算 SCNNode 的多轴 SCNVector4 旋转?

SCNNode 使用 a 进行旋转SCNVector4,它具有角度 (w) 和该角度如何应用于每个轴 (x, y, z) 的大小。例如,要绕 x 轴旋转 45 度,我会创建一个SCNVector4这样的:

我想做的是在所有三个轴上旋转它,例如:x 轴上 45 度,y 轴上 15 度和 z 轴上 -135 度。有谁知道计算决赛的数学SCNVector4吗?

0 投票
1 回答
666 浏览

cocoa - SCNView 调整大小问题

我正在尝试使用 ScreenKit 框架在 SCNView 中呈现 3D 条形图。

我的渲染代码是,

我可以渲染,但在重新调整视图大小时,图表栏会转到视图的中心。

我需要渲染图表,它覆盖了视图的边距,当重新调整大小时,它必须相应地改变。下面的图片显示了我的问题。


原图:

在此处输入图像描述


两个窗口的拉伸较少的图像:

在此处输入图像描述

谁能帮我解决这个问题。

0 投票
1 回答
2098 浏览

ios - Collada 到 SceneKit 到 iOS

我有一个 collada 文件,它包含一个多维数据集,从中我将数据导出到文件(只是原始字节),然后将字节导入 iOS。一切都好,我检查了数据,在 iOS 和 osx 上的所有顶点看起来都一样。

但是,当我检查 Collada 文件时,法线与 SceneKit 的法线非常不同

在 SceneKit 中,法线为 0、-1 或 1。在 Collada 文件中,我有 -2.831...、-1.31...等。

任何见解表示赞赏,

谢谢

D

0 投票
8 回答
7481 浏览

collada - 从场景包中提取顶点

我在理解场景套件几何时遇到问题。

我有来自 Blender 的默认立方体,我导出为 collada (DAE),并且可以将它带入 scenekit.... 一切都很好。

现在我想查看立方体的顶点。在 DAE 中,我可以看到“Cube-mesh-positions-array”的以下内容,

“1 1 -1 1 -1 -1 -1 -0.9999998 -1 -0.9999997 1 -1 1 0.9999995 1 0.9999994 -1.000001 1 -1 -0.9999997 1 -1 1 1”

现在我想在 scenekit 中做的是取回顶点,使用如下内容:

如果我处理 vertexBuffer(我尝试了许多查看数据的方法),它似乎不正确。

有人可以解释一下“SCNGeometrySourceSemanticVertex”给了我什么,以及如何正确提取顶点数据吗?我想看到的是:

此外,我正在研究以下类/方法,它们看起来很有希望(这里有一些好的数据值),但是来自 gmpe 的数据显示为空,有人能够解释“SCNGeometryElement”的数据属性包含什么吗?

谢谢,非常感谢帮助,

D

0 投票
1 回答
1138 浏览

geometry - 来自 Scenekit 基元的几何图形

我成功地从 SceneKit 基元中提取矢量数据,非常类似于这里的问题/答案:

从场景包中提取顶点

不过,这似乎不适用于 SceneKit 生成的所有几何图形。我可以提取标准的盒子、球体等,但是标准的 SceneKit 几何图形中似乎不包含倒角或更复杂的几何图形(例如来自 SCNText)之类的特殊功能。另外:普通的 SCNBox 和 SCNSphere 仅具有一种几何分辨率,并且不尊重提供的参数(例如,与 1.0 不同的尺寸)。

有人成功从 SCNText 中提取几何图形吗?

谢谢,

菲利克斯

0 投票
2 回答
1416 浏览

objective-c - 使用 SceneKit 从 DAE/COLLADA 中提取动画顶点

在 Mac OS X 上使用 SceneKit 加载 COLLADA (DAE) 文件,您可以通过遍历 SCNNode:s 及其各自的 SCNGeometry:s 的树轻松获取所有几何图形,并使用 [geometry geometrySourcesForSemantic: SCNGeometrySourceSemanticVertex] 提取顶点数据。

但是,给定一个包含动画对象的 DAE 文件 - SceneKit 是否能够为我提供动画中给定时间每个顶点的确切位置,或者我是否可以从关联的 CAAnimation 对象中提取所有动画数据?

我的用例是我想使用 SceneKit 导入 DAE 文件,但对其他所有内容使用我自己的渲染管道。

澄清 显然有两种方法可以实现这一点:

1)从关联动画中获取并解析关键帧

2) 让 SceneKit 评估给定时间的场景,并给我预先计算的顶点(等)坐标

我在用例中的目标是#2,但如果我能找到 SceneKit #1 使用的关键帧格式的文档也是可以接受的。

我的问题是,对于#1,我无法挖掘比以下内容更进一步的内容:

SCNNode.animationKeys 给出给定 SCNNode 可用的动画键,[SCNNode animationForKey:key] 给定 CAAnimationGroup 对象,CAAnimation 对象是通过 CAAnimationGroup.animations 获得的。CAAnimation 对象(对于我的 DAE 文件)是 CAKeyframeAnimation 的实际实例,我从中获得 CAKeyframeAnimation.values:

Keyframe (1 / 40): <00000000 0000f0bf 00000080 d9956d3c 000000a0 0e32a13c 00000000 00000000 00000020 636772bc 00000020 2914ef3f 00000000 0f7ecebf 00000000 00000000 00000020 1324a1bc 00000000 0f7ecebf 00000020 2914efbf 00000000 00000000 00000000 00000000 000000c0 205c6d40 00000000 00a069c0 00000000 0000f03f>

等等。所以要解决上面的#1 方法,我需要找到用于这些关键帧的格式。

0 投票
2 回答
3121 浏览

objective-c - 在 scenekit 中使用现有的 opengl 纹理

根据 Apple 的文档,您可以使用 NSColor、NSImage 和 CALayer 为 SCNMaterialProperty 提供纹理。SCNMaterialProperty

然而,我想知道是否有办法提供现有的 OpenGL 纹理,该纹理已使用 glGenTextures 创建并单独渲染。

我当然可以读取纹理的缓冲区,设置一个 NSImage,然后将它提供给 SCNMaterialProperty;但出于性能原因,这显然不是最优的。

通过覆盖我猜的材料的着色器程序来实现上述内容是有意义的,但这样做的文档似乎不存在。

0 投票
2 回答
2696 浏览

ios - SceneKit and COLLADA objects

Is there a way to create a SCNNode starting from a COLLADA Object and then add the node as child of the rootNode?

I see the with ScenKit I can create a SCNScene starting from a .dae file using

[SCNScene sceneWithURL:url options:nil error:&error];

But I can't find a way to create a Node starting just from a dae.

0 投票
1 回答
837 浏览

xcode5 - Xcode 5 - 场景工具包工具警告

我有一个用于 iPad 的 XCode 项目,它使用第三方框架 (NinevehGL) 来导入 3D Collada (.dae) 文件。这适用于 Copy Bundle Resources 中已有的现有 .dae。

但是,自从升级到 Xcode 5 后,当我将一个新的 .dae 文件添加到资源中时,我收到一个警告:

/scntool:资源保持不变,因为 Scene Kit 将无法在 10.6 上加载它。要解决此问题,您可以将产品的部署目标更改为 10.9 或更高版本。

我在 iPad 上运行它,所以不使用 Scene Kit。

任何帮助将非常感激。

谢谢!

0 投票
1 回答
914 浏览

macos - SceneKit CFURLCreateDataAndPropertiesFromResource 失败,错误代码为 -11

我正在试用 SceneKit,我想做的一件事是从 COLLADA 文件加载场景。这很好用,但是,纹理没有加载,并且在加载文件时,我收到以下错误:

我相信这里的部分问题是我在我的应用程序包中组织文件的方式 - 一个名为Textures.bundle保存所有纹理的文件,按类别组织,一个Models.bundle包含 COLLADA 文件:

xcode 文件树

我编写了类来获取包的类别(文件夹)中的文件路径,它返回正确的路径。甚至 Xcode 也可以正确获取文件,并正确加载相同的 COLLADA 文件,甚至可以识别纹理包中的图像:

xcode COLLADA 预览

纹理位置设置为“相对于 DAE 文档”,产生以下(正确)路径:../../Textures.bundle/ModelTextures/Computer/motherboard_motherboard.jpg

然后,在应用程序中,它呈现如下:

渲染输出

有任何想法吗?