草庐IT

ios - 为什么 SCNNode "jiggling"掉落到 SCNPlane 上?

我有一个SCNPlane,当检测到水平表面有足够的区域时,它会添加到场景中。根据放置的地板/table,飞机似乎放置在正确的位置。问题是当我将一个SCNNode(无论它是一个盒子、金字塔、3D模型等,这一直是一致的)放到平面上时,它最终会找到一个着陆点并且99%的节点开始疯狂地摇晃。很少有几次它只是着陆而根本没有移动。我还认为这可能是由于节点掉落并稍微低于平面表面造成的。它既不在平面的“顶部”,也不在平面的“下方”。也许节点正在崩溃,因为它在两个级别之间摇摆不定?这是一段视频,您可以在开始时看到盒子在平面下方和上方,橙色盒子在与深蓝色盒子碰撞时确实停止了,但又回到了摇晃的方式当绿色盒子

ios - 背景上的 SCNNode 大图像导致崩溃

我正在尝试使用ARKit和SceneKit创建标尺应用程序。我决定根据测量的距离以编程方式创建标尺图像。这是我用来绘制标尺的扩展:extensionUIImage{staticletdashLineWidth:CGFloat=2.0staticletdashDistance:CGFloat=163.0/25.4staticletrulerFont:UIFont=.systemFont(ofSize:15.0,weight:.regular)staticletattributes:[NSAttributedStringKey:Any]=[NSAttributedStringKey.fon

swift - ARKit – 使用 CALayer 在 SCNNode 中加载 GIF 图像无法正确渲染

我正在开发一个AR应用程序,我在其中渲染3D模型。点击子节点后,我通过使用CALayer创建动画并按照此线程将其加载到diffuse.contents来显示GIF图像SetcontentsofCALayertoanimatedGIF?letanimation:CAKeyframeAnimation=createGIFAnimation(url:gifImageURL!)!letlayer=CALayer()layer.bounds=CGRect(x:0,y:0,width:600,height:200)layer.add(animation,forKey:"contents")letn

swift - 在 Swift 中扩展 SCNNode

我想在Swift中扩展SCNNode(如果可能的话)。这是我的尝试:classMyNode:SCNNode{overrideinit(geometry:SCNGeometry)->SCNNode{returnsuper.init(geometry)}/*Xcoderequiredthis*/requiredinit(coderaDecoder:NSCoder){fatalError("init(coder:)hasnotbeenimplemented")}}->运算符被标记为错误“一行上的连续声明必须用;分隔”。我知道这是不对的,但如果我使用Xcode,它会按如下方式“修复”它:ove

ios - SceneKit Audio - 如何将 SCNPlayer 添加到 SCNNode 并播放声音

我目前正在使用这段代码(在SCNNode子类中)在SceneKit中播放声音。letaudioSource=SCNAudioSource(named:"coin.wav")letaudioPlayer=SCNAudioPlayer(source:audioSource)self.addAudioPlayer(audioPlayer)这并不理想,因为每次我播放新声音时它都会填充audioPlayers数组。理想情况下,我可以为每个要播放的声音设置一个SCNAudioPlayer,然后调用“播放”函数来播放它。不幸的是,我找不到播放功能。同样让我恼火的是,SCNAudioPlayer在添加

ios - SCNNode childNodes 的总高度

我目前正在使用以下方法获取SCNNode中所有子节点的总高度。有没有更有效/更好/更短/更快速的方式来做到这一点?CGFloat(columnNode.childNodes.reduce(CGFloat()){letgeometry=$1.geometry!asSCNBoxreturn$0+geometry.height}) 最佳答案 是的,还有一种方法可以让您得到更正确的答案。将所有子节点的几何图形的高度相加...仅当几何体是SCNBox时才有效不考虑子节点的变换(如果它们被移动、旋转或缩放怎么办?)不考虑父节点的变换(如果您想要

ios - ARKit - SCNNode 连续运动

我正在尝试创建一个应用程序,用户可以在其中堆叠不同的几何形状。在ARSCNView中加载的.scn文件中,我插入一个静态平面,然后在用户每次点击时,应用程序插入一个动态SCNNode。第一个节点被插入到平面上方几英寸处,以复制坠落的物体。然后,每个其他节点都被放在另一个节点之上。这是应用程序的主要思想;添加3个或4个节点后出现问题,它们之间出现滑动,几乎摇晃,整个结构崩溃。这是我要插入的节点:letdimension:CGFloat=0.075letcube=SCNBox(width:dimension,height:dimension,length:dimension,chamfer

ios - 检查 SCNNode SCNAction 是否完成

我创建了一个玩家可以在其中移动的SceneKit3D迷宫世界。跳跃等一些Action涉及上下移动相机,同时在几秒钟的时间内改变观察方向。在此期间,我想忽略用户的点击和滑动,这些点击和滑动通常会导致其他类型的移动,例如转身和前进。我可以创建一个与跳跃持续时间相匹配的计时器并设置一个bool值,但我希望有一种更简单的方法来检查相机的SCNNode。是否有一种简单的方法来查看相机的SCNNode是否不再运行用于跳跃的SCNAction,以便我可以在其他点击和滑动操作之前添加此逻辑?或者也许有一个SCNAction可以设置Bool,我可以把它放在我的跳跃序列的开始和结束处?这是我的跳转代码:l

ios - SCNNodes 中的颜色

我正在尝试将SCNNode的颜色设置为自定义RGBA颜色,但是当我尝试设置该框时,它最终会变成白色:letbox=SCNBox(width:4,height:1,length:4,chamferRadius:0)letboxNode=SCNNode(geometry:box)myScene.rootNode.addChildNode(boxNode)boxNode.castsShadow=truebox.firstMaterial?.diffuse.contents=UIColor(red:30,green:150,blue:30,alpha:1)这会使盒子变白,但是这样做是可行的:b

swift - 将 collada (dae) 文件加载到 SCNNode (Swift - SceneKit)

这行得通letscene=SCNScene(named:"house.dae")是否有一个节点的等价物?letnode=SCNNode(geometry:SCNGeometry(..??.."house.dae"..??..))我四处搜索,找不到任何东西可以将整个dae文件加载到SCNNode中。(不只是其中的一个ID) 最佳答案 //addaSCNSceneaschildNodetoanotherSCNScene(inthiscasetoscene)funcaddSceneToScene(){letgeoScene=SCNScen