Tag: scenekit

从基元创build自定义形状

我正在尝试创build一个结合了原始形状的自定义物理形状。 目标是创build一个圆形的立方体。 适当的方法似乎是init(形状:转换:)我在这里findhttps://developer.apple.com/library/prerelease/ios/documentation/SceneKit/Reference/SCNPhysicsShape_Class/index.html#//apple_ref/occ / clm / SCNPhysicsShape / shapeWithShapes:转换 : 我想这可以用8个球体,12个气瓶和一个中间的盒子来完成。 任何人都可以提供一个这样做的例子吗?

在SceneKit中点击/select节点(Swift)

我是iOS中的SceneKit和3D空间的新手。 我目前正在制作一个简单的游戏,展示一个28段的立方体(如果你想要的话,你可以使用“小立方体”)。 我想通过点击它们来移动迷你立方体,但是我无法理解如何select特定的节点(大立方体的子节点)。 任何人都可以帮我或发布一个链接到傻瓜的SceneKit教程? 我一直在寻找几天,并没有find我在找什么。 干杯

SceneKit轨道转换

所以从SceneKit开始,所有的东西都进行得很好,直到我偶然发现了转换,认为它会像层次上的CA3d *转换。 不过,看来我完全错误了,转换工作在Z轴的工作方式上完全不同。 例如,我正试图完成一个3d轨道式的运动,类似于旋转木马的样子。 这块CA3D代码出色地做到这一点: var trans = CATransform3DIdentity trans = CATransform3DRotate(trans, deg * (Float(M_PI)/180), 1, 1, 0) trans = CATransform3DTranslate(trans, 0, 0, 100) layer.transform = trans 如果应用于具有不同“deg”值的多个对象,则会获得一个很好的圆形3d轨道外观。 与SceneKit相同产生不同的结果: var trans = SCNMatrix4Identity trans = SCNMatrix4Rotate(trans,Float(angleTemp*(M_PI/180)), 1, 1, 0) trans = SCNMatrix4Translate(trans, 0, 0, 100) node.transform = transform 实际上,旋转之后,Z值轴根据CAT3D +图层中应用的旋转进行转换和平移,但是在SceneKit中,Z轴始终保持不变,因此平移只会将它们一起移动,所以您只需将其压扁看。 所以我明白这是在真正的3D空间中工作,但现在看来我不得不与Sphereical和Ellipsemath工作一样。 所以任何人都可以给我提示如何做我想做的事情? 我现在正在试验球形math和使用SCNMatrix4Translate,但我还没有得到正确的math呢。 我想我需要的是用公式来计算椭圆的xyz,我之后是非常类似的东西: http://en.wikipedia.org/wiki/Ellipse#mediaviewer/File:Conicas1.PNG […]

如何从ARKit录制video?

现在我正在testingARKit / SceneKit的实现。 对屏幕的基本渲染是有点工作,所以然后我想尝试将我在屏幕上看到的video录制到video中。 只是为了loggingScene Kit,我发现了这个Gist : // // ViewController.swift // SceneKitToVideo // // Created by Lacy Rhoades on 11/29/16. // Copyright © 2016 Lacy Rhoades. All rights reserved. // import SceneKit import GPUImage import Photos class ViewController: UIViewController { // Renders a scene (and shows it on the screen) var scnView: SCNView! // Another […]

自定义着色器SCNProgram iOS 9 Scenekit

我试图在SceneKit中SceneKit并教导自己。 基本上,我正在创build一个有3个矩形边和1个倾斜滑块的四边形。 我希望我的纹理能够在表面上伸展和变形/变形。 在线阅读一些东西,似乎我需要用自定义顶点和片段着色器来制作一个SCNProgram来获得效果。 但是,我似乎无法让纹理在表面上传播。 需要帮助,请。 (我是graphics编程新手,因此试图自己教)。 我的Swift代码创build的几何和纹理如下: func geometryCreate() -> SCNNode { let verticesPosition = [ SCNVector3Make(0.0, 0.0, 0.0), SCNVector3Make(5.0, 0.0, 0.0), SCNVector3Make(5.0, 5.0, 0.0), SCNVector3Make(0.0, 3.0, 0.0) ] let textureCord = [CGPoint (x: 0.0,y: 0.0), CGPoint(x: 1.0,y: 0.0), CGPoint(x: 1.0,y: 1.0), CGPoint(x: 0.0,y: 1.0)] let indices: [CInt] = [ 0, 2, 3, 0, […]

如何在iOS SceneKit中将.dae文件加载到SCNNode中?

我无法理解.dae文件中的几何graphics应该如何加载到iOS SceneKit场景图中。 我知道你可以直接将.dae文件加载到SCNScene中: // create a new scene let scene = SCNScene("test.scnassets/test.dae") 我也知道你可以创build一个空的SCNScene,并添加内置的3D对象作为子节点: let scene = SCNScene() var sphereNode = SCNNode() sphereNode.geometry = SCNSphere(radius: 1.0) scene.rootNode.addChildNode(sphereNode) 在第二种情况下,你可以加载一个.dae文件到SCNNode而不是使用内置的对象吗? 还是预计所有.dae文件需要首先加载到SCNScene? 如果后者是真的,那你怎么把SCNNode对象放到SCNScene下的场景图层次结构中的正确位置?编辑#1: 这现在对我来说是工作的,这是@FlippinFunbuild议的修改版本。 let url = NSBundle.mainBundle().URLForResource("test.scnassets/test", withExtension: "dae") let source = SCNSceneSource(URL: url, options: nil) let block = source.entryWithIdentifier("ID10", withClass: SCNGeometry.self) as SCNGeometry scene.rootNode.addChildNode(SCNNode(geometry: block)) 但也许有更好的办法? 以上涉及手动加载.dae树中的每个标识符。 […]

SCNBox在每个脸上都有不同的颜色或纹理

我是iOS开发的新手,我已经陷入了困境。 我正在尝试使用每个人脸颜色不同的SceneKit渲染一个多维数据集。 这是我到目前为止: func sceneSetup() { // 1 let scene = SCNScene() // 2 let BoxGeometry = SCNBox(width: 0.9, height: 0.9, length: 0.9, chamferRadius: 0.0) BoxGeometry.firstMaterial?.diffuse.contents = UIColor.redColor() let cube = SCNNode(geometry: BoxGeometry) cube.position = SCNVector3(x: 0, y: 0, z: -1) scene.rootNode.addChildNode(cube) // 3 sceneView.scene = scene sceneView.autoenablesDefaultLighting = true sceneView.allowsCameraControl = true 但我希望每张脸都有不同的颜色。 我怎么做?

将简单物理应用于SceneKit XCODE SWIFT中的.scn对象

嘿下面我有一个正常的球体,我只是为了testing我的游戏场景/世界是否有物理。 所以我只是把球放在场景/世界里,这是完美的。 它受重力的影响。 所以然后我试着做同样的事情.scn文件。 我给它的物理相同的testing球落下做对重力。 但男人不动 重力设置为-9.8来模拟正则重力代码: //—-Test-Circle-here——————– var sphere1: SCNNode! let sphereGeometry = SCNSphere(radius: 10.5) let sphereMaterial = SCNMaterial() let collisionCapsuleRadius = CGFloat(0.4 – 0.4) * 0.4 let collisionCapsuleHeight = CGFloat(0.4 – 0.4) sphereMaterial.diffuse.contents = UIColor.greenColor() sphereGeometry.materials = [sphereMaterial] sphere1 = SCNNode(geometry: sphereGeometry) sphere1.position = SCNVector3(x: 1.0, y: 0.05, z: 0.05) //—-Giving it a […]

使用GLSL数组的SceneKit着色器修改器

我正在尝试在SceneKit中将一些点传入一个着色器修改器,但我无法制定出正确的语法。 在我的着色器扩展代码中,我有: uniform vec2 points[100]; 如果我打电话… material.setValue(NSValue(point: CGPoint(x: 100.5, y: 50.5)), forKey: "points") …然后它设置points[0]的值,这使我认为这也许是不可能的。 我已经尝试了许多其他的组合键和值,但似乎没有任何工作。 有一个更好的方法吗? 我的最终目标是修改arrays中一组点的表面漫reflection颜色,否则使用默认渲染。 有没有更好的方法来做这个在着色器比循环vec2的数组? 谢谢你的帮助。

在SceneKit中使用MPMoviePlayerController作为纹理

我在scenekit中创build了一个多维数据集,并试图使用一个MPMoviePlayerController的实例作为它的材质。 这种方法虽然不错,但是效果不是很好:video看起来非常跳跃,就像在video帧之间跳转一样(基本上是从头到尾重放帧)。 声音是好的。 我做了一个简短的截图发生了什么,我想这是显而易见的video: Youtube的video 这是处理映射到多维数据集和创build播放器的代码: var moviePlayer: MPMoviePlayerController? func startPlayingVideo(){ let mainBundle = NSBundle.mainBundle() let url = mainBundle.URLForResource("Sample", withExtension: "m4v") moviePlayer = MPMoviePlayerController(contentURL: url) if let player = moviePlayer{ /* Listen for the notification that the movie player sends us whenever it finishes playing */ NSNotificationCenter.defaultCenter().addObserver(self, selector: "videoHasFinishedPlaying:", name: MPMoviePlayerPlaybackDidFinishNotification, object: nil) println("Successfully instantiated […]