问题标签 [scnscene]
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.
ios - SceneKit:用一个手势围绕点旋转相机,同时允许相机以不同的手势旋转
假设 SceneKit 场景提供类似于 Minecraft 的视角。有一台相机。相机节点就像人的“头”,而它的父节点就像“身体”。相机节点是父节点的子节点,称为“userNode”。
目标:
让用户用一根手指平移来旋转相机。换句话说,相机位置保持固定,但“头部”旋转并让用户观看场景,就像转了一圈一样。
让用户用两根手指平移以围绕给定点旋转相机。换句话说,相机位置和旋转现在会发生变化,以便让用户从不同角度查看同一点。
到目前为止,下面的代码实现了单指平移行为。问题是如何合并两指平移行为。
选项 1:按照这个答案,它解释了如何环绕相机。然而,这似乎不是最理想的,因为场景中已经有一个摄像机节点,并且需要额外的节点,同时还要在不同摄像机之间移动场景的视点。
选项 2:计算相机的新位置和旋转,这样可以避免添加另一个相机节点和另一个轨道节点。这感觉像是更好的答案,但可能更复杂。
问题:
1) 在 SceneKit 中是否有更简单的方法来完成此任务?
2)如果不是,上面的两个选项是否只有两个选项,如果是,哪个选项更好?
3) 对于选项 2,更新userNode
或“body”的位置似乎很简单:只需计算沿给定中心原点的圆的新位置,即轨道点)。对于“头”,除了更新(或“头”)的rotation
属性之外,还有什么需要注意的吗?cameraNode
似乎将相机定向为始终面向轨道点可能会更复杂,因为有一部分 SceneKit API 专用于它,例如,SCNLookAtConstraint.
ios - 如何使用来自 Blender 的 .dae (COLLADA) 文件在 SceneKit 中创建用户生成的动画
我正在尝试为 SceneKit 中 SCNScene 对象的特定部分设置动画(在我的情况下,我想为手的手指设置动画)。我很容易从 Blender 中导入带有相应骨骼的 .dae (COLLADA) 文件,以在模型上生成关节。
我的目标是使用用户生成的 0 到 1 之间的值在 iOS 上为这些骨骼设置动画。想象一个 UISlider,您可以在其中来回滚动并看到特定手指根据滑块的值移动。
这是需要的动画截图
我尝试通过调用像 Apple 的 Fox 示例这样的动画文件来为模型设置动画:
问题是这是一个全局动画,而不仅仅是食指。此外,它始终是“预定义”动画,而不是由用户输入控制的动画。最终我想混合动画(例如同时移动食指和拇指显示手势)
这可能吗?我很挣扎,因为我不知道如何操作网格的特定部分。我开始研究 MetalKit,但我不清楚这就是解决方案。
任何帮助将非常感激。
ios - 使用同一相机在不同深度添加多个 SCNView
我正在使用 SceneKit 添加带有 3D 战场的纸牌游戏。
战场有一个深度,其中 3D 对象的顶部是城堡的顶部,而底层在 z 轴上更下方,代表地面。
当玩家手中有卡片时,我想在可能的顶层将它们绘制为 UIViews,我已经能够通过添加我的 GameControllerView 来做到这一点,它具有卡片的 UIViews 作为子视图,将其直接放置在3D场景的顶部。
我想在 3D 对象内绘制不同深度(z 轴)的卡片 UIView——有时将它们绘制在地面上的图层上,有时将它们绘制在顶部的图层上。
通过将 childNodes 添加到主场景的 rootNode 中,我已经能够在战场的不同深度添加更多 3D 元素,如下所示:
但我特别需要添加 UIViews 而不是更多的 SCNScenes。
如何在底部深度设置一个 SCNView,在其上绘制 UI 视图,设置另一个增长到更高 z 轴深度的 SCNView,在其上绘制 UIView,并让它们共享相同的相机/屏幕?
ios - SceneKit:围绕任意点进行轨道运行而无需相机跳跃或将锚点移动到中心?
目标是围绕场景中任意但可见的点运行。
当用户平移时,相机应该围绕这个锚点移动和旋转。
如果锚点位于屏幕中间,这将非常有效。
但是,如果锚点偏离中心(例如,在屏幕的左边缘),相机会在将锚点带入中心时瞬间跳跃。
下面的代码修复了跳跃问题,但它使用户迷失方向,因为锚点缓慢地移动到中心。
相机移动与平移手势相关联。
关于如何解决这个问题的任何想法?
ios - 如何定位一个 SCNNode 以覆盖整个 SCNView?
我对 SceneKit 非常陌生,非常感谢您的帮助!
我的 UIView 中有一个 200x200 大小的 SCNView,它位于超级视图的中心。我想在里面放一个 SCNCylinder,这样 SCNCylinder 就可以覆盖整个 SCNView。我读到 Scenekit 的所有这些视图都是以米为单位定义的,那么如何在屏幕尺寸和 SCNCylinder 之间建立关系。
我试过了:
但这在我的 coinScene 和 ibOutletScene 之间留有余量。如何删除这个空间?
我也尝试添加相机:
但是我看到了随机行为,并且 coinNode 被隐藏了!我应该如何定位我的相机?或者有没有其他方法可以从我的 ibOutletScene 中删除多余的空间?
编辑:如果我不添加相机,这就是它的外观。红色场景和绿色硬币之间有一个边缘。我尝试了多种尺寸的硬币,但除非我添加相机,否则我无法删除此边距。但是,如果我添加相机,我会遇到另一个问题,在这个截图下面提到。
如果我不添加相机,硬币上的旋转动画效果很好,但是如果我添加相机,旋转会放大然后随着动画再次变小。如何在不增加尺寸的情况下沿其轴旋转它?我正在使用以下代码来旋转硬币:相同的代码在没有相机的情况下也可以正常工作,但在添加相机后会放大硬币。签出快照。
scenekit - 我从 SCNScene 创建了 MDLAsset。如何提取 MDLMesh、MDLCamera(s) 和 MDLLight?
我正在努力尝试遍历MDLAsset
通过加载SCNScene
文件 (.scn) 创建的实例。
我想识别和提取MDLMesh
s 以及相机和灯光。我认为没有直接的方法可以做到这一点。
例如,我在 MDLAsset 上看到了这个实例方法:
这是我用的吗?
我已经在 SceneKit 建模器中仔细标记了事物。我可以不参考那些理想的吗?当然,有一本我可以访问的 ids/labels 字典。我在这里想念什么?
更新 0
由于完全缺乏 Apple 文档,我不得不求助于 Xcode 调试器中的场景图。叹息...
一些东西。我看到了MDLMesh
,MDLSubmesh
这就是我所追求的。获取它的遍历方法是什么?灯光和相机也是如此。
我还需要知道顶点描述符的布局,以便与我的着色器同步。我可以在 parsed 上强制使用特定的顶点布局SCNScene
吗?
scenekit - 我有一个 SCNScene 实例。如何提取每个 SCNGeometry 实例?
在Metal
编写的应用程序中,Swift
我想从实例中提取SCNGeometry
实例SCNScene
以继续并构建MDLMesh
。我没有看到提取几何图形的 API 调用(相机和灯光类似)。我该怎么做呢?
ios - 更改 SCNScene 比例
我正在尝试使用SCNNode
以下代码缩小我的对象:
但问题是对象的比例根本没有改变!怎么了 ?
ios - 检查 SCNNode SCNAction 是否完成
我创建了一个玩家可以在其中移动的 SceneKit 3D 迷宫世界。像跳跃这样的一些动作涉及上下移动相机,同时在几秒钟的时间内改变观察方向。在此期间,我想忽略用户的点击和滑动,这通常会导致其他类型的运动,如转身和向前移动。
我可以创建一个与跳跃持续时间相匹配的计时器并设置一个布尔值,但我希望有一种更简单的方法来检查相机的 SCNNode。
是否有一种简单的方法可以查看相机的 SCNNode 是否不再运行 SCNAction 进行跳转,以便我可以在其他点击和滑动操作之前添加此逻辑?
或者也许有一个 SCNAction 可以设置我可以在跳跃序列的开始和结束时放置的 Bool?
这是我的跳转代码:
谢谢
格雷格