Tag: scenekit

如何将一个dae导入到SceneKit for ARKit

如果我运行Xcode的ARKit项目模板,我可以按照预期移动默认的船。 我已经尝试导入一些从Blender导出的DAE模型,将船舶切换到新的项目,但保持代码相同。 他们总是看得见,但在相机前面的位置。 如果我尝试在模型中移动,它会粘在摄像机的前面,不会留在同一个虚拟空间中。 我也尝试从另一个教程导入一个dae,并按预期工作。 当将3d模型导出为Collada dae文件以确保它将锚定在ARKit中的某个位置时,是否需要设置?

SceneKit:如果目标是旋转相机和项目节点X单位在相机前,使用变换或直接操纵旋转/位置属性?

对于体素艺术应用程序,其目标是让用户在SceneKit场景中移动和旋转摄像头,然后点击以放置块。 下面的代码让用户通过平移来旋转摄像头。 手势结束后,我们移动一个现有的块,使其在相机的Z轴上为-X个单位(即相机前面的-X个单位)。 cameraNode是场景的angular度,是userNode一个子userNode 。 当用户移动操纵杆时,我们更新userNode.的位置userNode. 问题:其他SOpost通过应用变换而不是改变旋转和位置属性来操作相机节点。 一种方法比另一种更好吗? func sceneViewPannedOneFinger(sender: UIPanGestureRecognizer) { // Get pan distance & convert to radians let translation = sender.translationInView(sender.view!) var xRadians = GLKMathDegreesToRadians(Float(translation.x)) var yRadians = GLKMathDegreesToRadians(Float(translation.y)) // Get x & y radians xRadians = (xRadians / 6) + curXRadians yRadians = (yRadians / 6) + curYRadians // Limit yRadians […]

在视图控制器中添加一个Spark粒子精灵

我创build了一个基于spark模板的.sks粒子发射器。 我的应用程序是一个普通的应用程序(不是游戏)。 当用户点击一个button时,我有一个新的视图控制器, over fullscreen显示over fullscreen以便我可以模糊背景。 在这个模式中,我创build了一个view并给了它一个SCNView的类见下图: 如何加载粒子.sks文件在Particles视图上的viewController上执行animation? 更新如何在视图控制器中加载SceneKit粒子系统?

如何使用平移手势使用四元数在SceneKit中旋转摄像机

我正在使用iOS SceneKit框架构build360video查看器。 我想使用UIPanGestureRecognizer来控制相机的方向。 SCNNode有几个属性可以用来指定它们的旋转: rotation (旋转matrix), orientation (四元数), eulerAngles (每个轴angular度)。 我读过的一切都是为了避免使用欧拉angular度来避免万向locking 。 我想用四元数的原因,我不会在这里进入。 我无法正常工作。 相机控制几乎是我想要的地方,但有什么问题。 尽pipe我试图只影响X轴和Y轴,但看起来好像相机正在围绕Z轴旋转。 我相信这个问题与我的四元数乘法逻辑有关。 我没有做任何与四元年相关的东西(我的平底锅手势处理器在这里: func didPan(recognizer: UIPanGestureRecognizer) { switch recognizer.state { case .Began: self.previousPanTranslation = .zero case .Changed: guard let previous = self.previousPanTranslation else { assertionFailure("Attempt to unwrap previous pan translation failed.") return } // Calculate how much translation occurred between […]

渲染一个SCNGeometry作为一个线框

我在iOS上使用SceneKit,我有一个我想渲染为线框的几何。 所以基本上我只想绘制线条,所以没有纹理。 我想通过使用SCNMaterial的shaderModifiers属性来实现这一点。 着色器修改器的示例: material.shaderModifiers = [ SCNShaderModifierEntryPointFragment: "_output.color.rgb = vec3(1.0) – _output.color.rgb;" ] 这个例子显然简单地反转了输出的颜色。 我不知道这个“GLSL”语言,我不得不使用shader片段。 任何人都可以告诉我,我应该使用什么代码作为着色器片段,只在边缘附近绘制,使几何看起来像一个线框? 或者也许有一个完整的方法来渲染一个几何线框。 我很想听到它。

SKVideoNode作为SCNSphere的纹理

我试图使用SKVideoNode作为我的SCNView中SCNSphere的video纹理源 我正在回答这个问题: SKVideoNode(embedded在SKScene中)作为用于场景套件节点不起作用的纹理 和我的代码(粘贴在问题的最后),我得到一个video和audio播放。 问题是,映射只发生在球体的四分之一(全xy正四分之一)。 cameraNode在sphere(0,0,0)内,并且独立于sphereNode。 我将一个缩放应用于球体节点,只是为了扭转纹理的节点: sphereNode.scale = SCNVector3Make(-1, 1, 1) 但是评论说这个没有效果。 这是所有在设备上testing(iphone 6 +,使用iOS 9.1): let sphere = SCNSphere(radius: 1) . . . func setupView() { // setup the sphere sphere.segmentCount = 55 // sphere material sceneMaterial = SCNMaterial() // setup the sphereNode sphereNode = SCNNode(geometry: sphere) sphereNode.position = SCNVector3Make(0, 0, 0) sphereNode.scale […]

将自定义游戏逻辑添加到Scene Kit(Swift)

我需要添加一个游戏循环到我的GameViewController(从iOS开发的Swift“游戏”模板),以创build一个应用程序,并find这个参考页面解释如何做到这一点: https://developer.apple.com/library/prerelease/ios/documentation/SceneKit/Reference/SCNSceneRendererDelegate_Protocol/ 但是,当我尝试将SCNView的委托设置为ViewController它引发警告和错误(在viewDidLoad()内): gameView.delegate = self gameView连接到我的故事板中的SCNView: @IBOutlet weak var gameView: SCNView! 如果有人能够使用Swift和Scene Kit来设置游戏逻辑的代码示例,或者从头开始向我解释,那将是非常好的。 谢谢!

SceneKit节点不会改变场景根节点的位置

我使用的是与ARKit的SceneKit,现在有一个简单的应用程序,我点击屏幕上,它添加一个ARAnchor和一个SCNNode到我的场景。 在某些时候,我想要移动整个场景,所以我试着改变sceneView.scene.rootNode.position.x += 10来testing。 如果我在任何特定的节点上调用这个节点,那么该节点确实适当地移动 但是在rootNode上调用它,没有任何反应,我期望每个子节点(它是场景中的每个节点)都随之移动。 为什么我的其他节点不能正常移动,有什么我可以做的解决这个问题? 还是我在想这个错误?

Swift Scenekit – 居中SCNText – getBoundingBoxMin:Max问题

使用SCNText上的alignmentMode选项。 一直googling,看起来像alignmentMode和containerFrame有问题。 我find的替代schemebuild议使用get bounding box函数来查找文本大小,然后手动调整。 伟大的除了我不能得到的function工作。 当我尝试获取这两个向量时,出现错误: 'SCNVector3'不能转换为'UnsafeMutablePointer <SCNVector3>' 我在几何和节点上都得到了这个结果。 代码示例如下 func setCounterValue(counterValue:Int) { var v1 = SCNVector3(x: 0,y: 0,z: 0) var v2 = SCNVector3(x: 0,y: 0,z: 0) _counterValue = counterValue let newText = SCNText(string: String(format: "%06d", counterValue), extrusionDepth:sDepth) newText.font = UIFont (name: "Arial", size: 3) newText.firstMaterial!.diffuse.contents = UIColor.whiteColor() newText.firstMaterial!.specular.contents = UIColor.whiteColor() newText.getBoundingBoxMin(v1, max: v2) […]

Core Motion控制的SceneKit相机如何避免晃动?

我使用本答案中描述的CMDeviceMotion扩展将SceneKit相机设置为当前的CMDeviceMotion姿态: func deviceDidMove(motion: CMDeviceMotion?, error: NSError?) { if let motion = motion { let orientation = motion.gaze(atOrientation: UIApplication.sharedApplication().statusBarOrientation) cameraNode.orientation = orientation } } 这工作很好,但是,我想阻止旋转(滚动),只允许相机转身(偏航)和俯仰。 我试图将四元数转换回欧拉angular,并简单地离开滚动0: cameraNode.eulerAngles = SCNVector3( x: orientation.pitch(), y: orientation.yaw(), z: 0) 但是,这只适用于偏航运动的一半。 另一半,相机颠倒了。 我怀疑这是涉及欧拉angular的万向节锁问题。 四元数对我来说有点像黑魔法,但是有没有办法直接在四元数水平上去掉滚动分量,这样我可以避开欧拉angular?