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

objective-c - 使用 SceneKit 在两点之间绘制一条线

我有两个 SCNVector3 类型的点(我们称它们为 pointA 和 pointB)。我想在他们之间画一条线。似乎应该很容易,但找不到方法。

我看到两个选项,都有问题:

使用半径非常小的 SCNCylinder,长度为 |pointA-pointB| 然后定位/旋转它。

使用自定义 SCNGeometry 但不确定如何;也许必须定义两个三角形来形成一个非常薄的矩形?

似乎应该有一种更简单的方法来做到这一点,但我似乎找不到。

编辑:使用三角形方法可以在 (0,0,0) 和 (10,10,10) 之间画一条线:

但是有问题:由于法线,你只能从一侧看到这条线!从另一边是看不见的。此外,如果“delta”太小,您根本看不到这条线。事实上,它在技术上是一个矩形,而不是我想要的线,如果我想绘制多条连接线,这可能会导致小的图形故障。

0 投票
1 回答
4149 浏览

objective-c - SceneKit 中的正交相机和缩放控件

当使用带有 的相机时myCameraNode.camera.usesOrthographicProjection = YES;,据我所知,您无法像通常使用 给出的默认控件myScene.allowsCameraControl = YES;那样进行缩放 – 我可以判断的唯一缩放方法是更改myCameraNode.scale = (SCNVector3*)...

有没有办法以某种方式将滚轮绑定到这个比例参数,同时保留标准的相机控制旋转/平移?或者以其他方式“修复”默认相机控件?

编辑:我想我误解了相机的工作原理。两指缩放手势仍然适用于正交投影,但似乎它只能让我缩小而不能让我进一步放大。我怀疑它可能myCameraNode.scalescale我的对象越大越小)。

0 投票
1 回答
1474 浏览

objective-c - 3D 空间中的 2D 平面广告牌,其中相机不是场景的中心

我在 OpenGL / SceneKit / CoreAnimation 环境中遇到转换问题。我有我的 LED 场景。我还创建了一个与每个 LED 相交的平面。这架飞机将来会是透明的,一旦我解决了广告牌问题,它将用于在 LED 周围画一个高光圈。

默认行为

我正在尝试将飞机广告牌制作到相机上。我遇到的问题是我找不到确切的转换来使这项工作在我建立的那种场景中发挥作用。

在我的 mouseDragged: 方法中,我正在反转 X 旋转和 Y 旋转矩阵,将它们连接起来并使用它作为最终变换来反转 LED 的正向旋转,以使飞机看起来总是面向相机。

如果我只是将运动锁定到任一轴而不是一起,这通常适用于任一轴本身,

x轴傻瓜

但是当我移动两个轴时,看起来 Y 轴需要大约 2 整圈才能赶上“赶上”(在 Y 轴上移动时,平面沿 x 轴以顺时针/逆时针方向旋转),并且然后 x 轴“关闭”并且不会像以前那样移动。

当我阅读billboard时,主要是从旋转/变换矩阵中提取平移方面并使用它,但是,在这些示例中,我认为相机被认为是场景的中心,而在 SceneKit 和方式中我正在做一些事情,中心是 LED 阵列的中心,当我移动 LED 节点时相机是固定的,正如您在 mouseDragged: 方法中看到的那样。

0 投票
3 回答
7350 浏览

opengl - 如何使用 SceneKit 在场景中找到我的鼠标点?

我已经在 SceneKit 中设置了一个场景,并发布了一个命中测试来选择一个项目。但是,我希望能够沿着我场景中的平面移动该项目。我继续收到鼠标拖动事件,但不知道如何将那些 2D 坐标转换为场景中的 3D 坐标。

我的情况很简单。相机位于 0, 0, 50 并指向 0, 0, 0。我只想沿着 z 平面拖动对象,z 值为 0。

命中测试就像一个魅力,但我如何将鼠标点从拖动事件转换到场景中我正在拖动的 3D 对象的新位置?

0 投票
3 回答
2761 浏览

scenekit - 无法创建 SCNView 的屏幕截图

是否可以获得 SCNView 的屏幕截图?我正在尝试使用下面的代码,但它总是出现白色......

当视图是标准的 NSView 时,它可以正常工作...

0 投票
0 回答
1282 浏览

macos - Flip the y-Axis in osx SceneKit

I'm using SceneKit on OSX.

Is it possible to flip the y-Axis within SceneKit.

I want the y-Axis going up to be negative rather than positive?

Update, here is my code, I have tried the -1 y-Axis, but the box is still in the top right quadrant...

0 投票
2 回答
2296 浏览

macos - 场景工具包 - 拖动对象

我正在尝试使用 Scene Kit 用鼠标/触控板拖动棋子。所有对象(棋盘和棋子)都是从 Collada 文件加载的根节点的子节点。

我在 Stack Overflow 的其他地方找到了对该过程的有用描述。使用该描述,我编写了下面代码的初始版本。我的问题是点击坐标和片段节点位置之间的差异——它们的坐标是不同的数量级。我仍然不清楚如何匹配它们——把它们放在“同一个宇宙”中。我已经尝试了来自 Apple 论坛的一些建议以及我自己的幻想。

这是我目前的尝试,主要是根据上面的链接恢复到原始版本,以及沿途记录的坐标值。结果是拖动棋子会导致它突然跳出屏幕:

到目前为止,我已经收到了很多有趣且有用的评论和建议。但我已经意识到,要继续前进,我可能需要一个工作代码示例,它显示了允许点击和向量存在于“同一个宇宙”中的秘诀。

0 投票
2 回答
1883 浏览

ios - 将几何图形从一个场景复制到另一个场景

我正在玩 SceneKit 和 Swift(但 Objective-C 中的答案很好)。

我知道如何将 collada 文件加载到场景中。(您可以将其加载到节点中吗?)

这是我正在使用的 Swift 代码:

(我不确定我声明错误的方式是多么地道。请随时启发我。)

这似乎工作正常,但我现在想在这个场景(或整个场景,没关系)中插入一些东西到另一个场景中。我已经得到了类似的东西来编译和运行,但它似乎不起作用。

0 投票
1 回答
542 浏览

swift - 如何获取 CMutablePointer来自 SCNVector3[]?

我正在尝试使用 SCNGeometrySource 的init(vertices: CMutablePointer<SCNVector3>, count: Int)初始化程序,但我不知道如何制作CMutablePointer<SCNVector3>.

在 Objective-C 中,我会使用 C 数组,但我不认为SCNVector3[]Swift 中的 a 是这样布局的。

0 投票
2 回答
3258 浏览

ios - 从 Orientation 获取 SCNNode 的“向上”侧

SCNBox在 SCNScene 中有一个。一旦场景动画化,SCNBox变化就是方向,可以通过检查它的presentationNode.orientation. 该值在 SCNVector4 中返回。如何SCNBox从 SCNVector4 中返回的值确定哪一侧是朝上的一侧?

我试图规范化数据并提出以下数据

不幸的是,这并不总是正确的,并且检查它有时会偶尔返回无效的一面。

SCNBox有没有一种可靠的方法可以根据其几何的方向属性确定其朝上的一面?

编辑:根据Toyos的回答,我想出了以下代码,但它不起作用。希望这将有助于更接近最终目标。我还使用了从场景包中提取顶点中的代码来获取我的 SCNBoxNode 的顶点。