Tag: scenekit

在SceneKit应用程序中CGImage相关的内存泄漏

我正在使用Scene Kit编写一个3D游戏。 当我在乐器中使用Leaksconfiguration文件时,发现存在泄漏。 对于第一个红十字图标,它说51个新的泄漏。 另外,如果你进一步查看泄漏检查区域,则会显示灰色的虚线图标,表示没有新的泄漏。 把它放在上下文中,我尝试在一个单位的游戏完成后再现一个场景,并使用当前的场景来presentScene… 。 这会在4到5个单位之后崩溃。 我得到了内存警告,因此我使用了泄漏configuration文件。 我不知道如何解决这个泄漏,因为我只使用SceneKit API而不是任何Core Foundation API。 如果有人有解决scheme,或者可以提供相关的指针来解决这个漏洞,那将是非常好的。

SceneKit SceneKitRotation中的节点旋转

我刚刚跳入iOS的场景工具包第一次。 我想要做的是导入一个.dae文件,并在代码中旋转对象。 发生的事情是,当我导入我的文件时,我发现它的方向是我期望的。 这很好,现在我想旋转它,以便较长的一端水平。 在我的坐标系中,应该围绕Z轴旋转90度。 这样做在xcode的graphics部分显示了这一点。 当我开始在代码中操作时,问题就出现了。 如果我在graphics界面中撤消旋转,并尝试在代码中执行它,我会得到意想不到的行为。 如果我从没有更改代码开始,模拟器就会显示出来 如果我用此代码围绕Z轴执行代码旋转 // create a new scene SCNScene *scene = [SCNScene sceneNamed:@"art.scnassets/board.dae"]; SCNNode *board = [scene.rootNode childNodeWithName:@"board" recursively:NO]; board.rotation = SCNVector4Make(0, 0, 1, M_PI/2); 我没有看到模拟器中的预期行为,我明白了 其中没有显示太多的细节,但是电路板已经绕着垂直轴旋转了,我认为这是Y轴。 这导致我尝试围绕Y轴旋转踢和咧嘴笑。 这是这个代码。 // create a new scene SCNScene *scene = [SCNScene sceneNamed:@"art.scnassets/board.dae"]; SCNNode *board = [scene.rootNode childNodeWithName:@"board" recursively:NO]; board.rotation = SCNVector4Make(0, […]

ARKit中的变换中的不同列表示什么?

ARAnchor有6列,其中最后3列表示x,y和z坐标。 我想知道其他(第一)3列代表什么?

UINavigationViewController中的SceneKit场景太长而无法释放

我的应用程序使用标准的UINavigationViewController。 在某些时候,用户已经导航到显示一个SceneKit场景的ViewController。 这个场景在内存中非常沉重,因为它有大约6000个几何graphics,每个几何graphics都有自己的材质(这需要这样做)。 当用户单击顶部栏的后退button以返回到先前的viewController时,应用程序将正确popup当前的视图控制器并显示下面的视图控制器。 但是,大约4秒钟,新的ViewController的UI显示冻结。 我已经使用了仪器时间分析器,而且我可以看到这些SceneKit方法占用了这4秒钟的很大一部分时间: – [NSConcreteMapTable countByEnumeratingWithState:objects:count:] – [SCNMetalResourceManager_geometryWillDie:] – [SCNMetalResourceManager _materialWillDie:] 这是有道理的,因为有这么多的几何形状和材料。 我怎样才能解决这种情况,以便从SceneKit透视图(快速取消分配)或从UINavigationViewController透视图(可能会强制释放场景以在单独的线程中发生)释放沉重的场景时,UI不会被阻塞? )。

具有多边形的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: […]

Scenekit – 基于世界坐标轴的旋转子子节点的convertTransform

我有一个下面的场景: [Root Node] | [Main Container] | | [Node A Wrapper] [Node B Wrapper] | | [Node A] [Node B] 我已经设置了平移手势识别器,当您在开放空间平移时,[主容器]以+/- Double.pi / 2(90度)在选定的方向上旋转。 当平底锅在其中一个子节点A,B(我在touchesBegan上testing了这个)时,我想沿着世界轴的方向旋转子节点(再次以90度递增)。 我正在使用从根节点的convertTransform()旋转[主容器],它工作正常,旋转沿着世界轴进行 – 主容器的位置是(0,0,0),我相信这使得它更容易。 我包装子节点的原因是它们在包装器中有本地位置(0,0,0),这应该有助于围绕其原点的旋转。 但是,当我在[主容器]上执行旋转时,它们也被旋转,它们的局部轴的方向被改变,并且围绕与我想要的不同的轴执行旋转。 在我对变换matrix的(非常有限的)理解中,我假设我需要以某种方式链接和乘以父节点的convertTransform产生的matrix,或者以某种方式使用worldTransform属性,但是我尝试了奇怪旋转的结果。 任何帮助,将不胜感激!

SceneKit编辑器为节点设置自定义类

在SpriteKit编辑器中,我可以将自定义类分配给SKNode,如下所示: 但是,我似乎无法findSceneKit编辑器中的等效function。 它是否存在? 如果我不能为SCNNode设置一个自定义类,那么这个function是不是有原因,或者Xcode团队没有得到它呢? (换句话说,我应该提交一个雷达?)

如何为ARKit创build一个场景文件?

在ARKit示例源代码中,我可以看到“.scn”[场景工具包文件]。 我想知道如何创build一个新的场景文件? 让我们说一个硬币场景? 任何网站,我可以下载? 或学习如何创build一个供我使用? 🤞

无法从caching目录显示3D文件

你能帮我确定这里的问题吗? 看来我无法从caching目录显示3d文件。 我有这个错误SceneKit IO:错误,COLLADA文件不支持在这个平台上。 保存在caching目录中的zip文件包含纹理的.dae文件和.png文件。 使用Scene Kit,您可以: 导入COLLADA 3D对象并构build由摄像头,灯光和网格组成的场景。 https://developer.apple.com/library/mac/documentation/3DDrawing/Conceptual/SceneKit_PG/Introduction/Introduction.html 谢谢。 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(queue, ^{ NSURL *url = [NSURL URLWithString:@"my url" NSData *data = [NSData dataWithContentsOfURL:url options:0 error:&error]; if(!error) { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); NSString *path = [paths objectAtIndex:0]; NSString *zipPath = [path stringByAppendingPathComponent:@"zipfile.zip"]; [data writeToFile:zipPath options:0 error:&error]; if(!error) { […]

在sceneKit View,iOS,Swift中获取像素颜色

我尝试在sceneKit视图中获取特定像素的颜色。 不过,我只能看到我背景的颜色。 在我的场景中,我有一个带有纹理图像的球体。 有人可以帮我吗? import UIKit extension UIView { func getColourFromPoint(point:CGPoint) -> UIColor { let colorSpace:CGColorSpace = CGColorSpaceCreateDeviceRGB()! let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.PremultipliedLast.rawValue) var pixelData:[UInt8] = [0, 0, 0, 0] let context = CGBitmapContextCreate(&pixelData, 1, 1, 8, 4, colorSpace, bitmapInfo.rawValue) CGContextTranslateCTM(context, -point.x, -point.y); self.layer.renderInContext(context!) let red:CGFloat = CGFloat(pixelData[0])/CGFloat(255.0) let green:CGFloat = CGFloat(pixelData[1])/CGFloat(255.0) let blue:CGFloat = […]