Tag: scnnode

具有多边形的SCNGeometry作为primitiveType

试图找出如何创build一个多边形SCNGeometry作为primitiveType,我的目标是添加多边形节点作为一个球体节点的孩子,并使它看起来像地图工具包MKPolygon, 就像在这个例子 。 我目前的代码是: //Take an arbitrary array of vectors let vertices: [SCNVector3] = [ SCNVector3Make(-0.1304485, 0.551937, 0.8236193), SCNVector3Make(0.01393811, 0.601815, 0.7985139), SCNVector3Make(0.2971005, 0.5591929, 0.7739732), SCNVector3Make(0.4516893, 0.5150381, 0.7285002), SCNVector3Make(0.4629132, 0.4383712, 0.7704169), SCNVector3Make(0.1333823, 0.5224985, 0.8421428), SCNVector3Make(-0.1684743, 0.4694716, 0.8667254)] //Does polygon shape require indices? let indices: [Int] = [0,1,2,3,4,5,6] let vertexSource = SCNGeometrySource(vertices: vertices) let indexData = Data(bytes: […]

从触摸位置快速获取SCNNode环境中的vector

我有我的相机的位置和方向,在屏幕上的CGPoint触摸位置,我需要在我的3d SCNNode环境中,我在屏幕上触摸的方向的线(最好是vector),我怎么能得到这个? 代码片段会非常有帮助。

在场景中添加大量的自定义节点需要很长时间才能加载

我正在构build一个scenekit应用程序,但是我有一些更好的细节的问题。 我创build了一个scene ,我正在给它添加自定义的几何graphics,直到节点的数量达到大约100个,它才能正常工作。向场景添加大量节点是非常理想的,是否还有更简单的方法来实现? for i in 0..<modelArr!.count { let model = modelArr![i] let pos: [SCNVector3] = Parser.loadPosition(model) let norm:[SCNVector3] = Parser.loadNormals(model) let ind:[CInt] = Parser.loadIndices(model) let src = SCNGeometrySource(vertices: pos, count: pos.count) let norSrc = SCNGeometrySource(normals: norm, count: norm.count) //let indexData = NSData(bytes: ind, length: sizeof(CInt) * ind.count) let indexData = NSData(bytes: Array<CInt>(0..<CInt(ind.count)), length: ind.count […]

在创build新的SCNNode之前移除SCNNode不释放内存

我正在构build一个应用程序,使用Scenekit来显示基于从数据库返回的信息的场景。 我创build了一个类func的自定义类创build一个SCNNode包含需要绘制的一切,并将其返回到我的SCNView。 在调用这个函数之前,我删除所有现有的节点 一切工作很好,直到我需要再次调用它。 删除旧的SCNNode之后在创build新内存之前,不会释放内存。 有没有一个标准的方式来删除和更换SCNNode,而不会超载内存? 我是iOS开发新手,从来没有真正完成graphics。 谢谢

SceneKit:关于使用Tron灯光周期来重现发光的光迹的build议

目标是在SceneKit中重现类似于下面的图像的光迹。 步道不需要如此详细,但是想法是达到类似的视觉效果。 我们尝试使用0.5左右不透明度的薄立方体。 我们连在一起200左右,并附加到一个节点作为一个光线。 那根本就不是高性能的。 这篇文章build议使用粒子发射器,但是当另一个物体碰到轨迹时,我们也需要检测碰撞。 类文件说,与粒子发射器的碰撞检测也不performance。 任何build议,以最好的方式来模拟一个类似的光迹? 一些考虑: 1)就像在Tron游戏中一样,这些光迹将长得更长。 对于基本的边界,假设将有2000 – 4000个节点损害这些光迹(每个玩家大约200个)。 我们可以把FPS降到30左右。 2)这些轨迹是否与来自devise者的图像/网格更好地组合,或者将它们构造出SCNShapes? 3)光迹必须能够检测到碰撞。 谢谢您的帮助!

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 […]

放置,拖放和删除ARKit中的SCNNode

我正在使用ARKit开发一个小型项目。 我希望能够添加对象到我的AR SceneView点击,删除它们,双击,并拖动主题拖动。 初始点击放置对象工作正常,但我有一些与节点删除和拖动的问题。 移除和拖拽的主要问题是实际上“握住”或点击SCNNode是非常困难的。 大部分结果最终都不在我添加的SCNNode上。 第二个问题是,拖动是有点bug,SCNNode真的不像我的手指那样拖动。 我已经决定在github上创build一个项目,链接在这里: https : //github.com/theraad/ARAttempt 但是我也会发布我的代码来移除对象并在这里拖动对象: -(void)handleRemoveObject:(UITapGestureRecognizer *)recognizer { NSLog(@"Long Press Fired"); CGPoint tapPoint = [recognizer locationInView:_sceneView]; NSArray <SCNHitTestResult *> *result = [self.sceneView hitTest:tapPoint options:nil]; if ([result count] == 0) { return; } SCNHitTestResult *hitResult = [result firstObject]; if (hitResult.node) { [[hitResult.node parentNode] removeFromParentNode]; } } -(void)moveObject:(UIPanGestureRecognizer *)recognizer { […]

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

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

ARKit放置一个SCNNode面向相机

我正在使用ARKit来显示3D对象。 我设法把节点放在用户面前的现实世界中(也就是相机)。 但是,当我放下它们的时候,我并没有设法使它们面对相机。 let tap_point=CGPoint(x: x, y: y) let results=arscn_view.hitTest(tap_point, types: .estimatedHorizontalPlane) guard results.count>0 else{ return } guard let r=results.first else{ return } let hit_tf=SCNMatrix4(r.worldTransform) let new_pos=SCNVector3Make(hit_tf.m41, hit_tf.m42+Float(0.2), hit_tf.m43) guard let scene=SCNScene(named: file_name) else{ return } guard let node=scene.rootNode.childNode(withName: "Mesh", recursively: true) else{ return } node.position=new_pos arscn_view.scene.rootNode.addChildNode(node) 节点位于摄像机前的平面上。 但他们都在朝着同一个方向看。 我想我应该旋转 SCNNode但我没有设法做到这一点。

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 但我希望每张脸都有不同的颜色。 我怎么做?