2
如何在代码中创建SceneKit SCNSkinner对象?
我有一个使用SceneKit for iOS 8的Swift应用程序。我从.dae文件加载了一个场景,该文件包含由骨架控制的网格。在运行时,我需要修改纹理坐标。不能使用变换-我需要为网格中的每个顶点计算一个不同的全新UV。 我知道几何体在SceneKit中是不可变的,并且我已经读到建议的方法是手动制作副本。我正在尝试这样做,但是在尝试重新创建SCNSkinnerin代码时,我总是以崩溃告终。飞机坠毁是EXC_BAD_ACCESS内部的C3DSourceAccessorGetMutableValuePtrAtIndex。不幸的是,目前还没有源代码,因此我不确定为什么它会崩溃。我将其范围缩小到SCNSkinner连接到网格节点的对象。如果不设置该值,则不会崩溃,并且一切正常。 编辑:这是崩溃的更完整的调用堆栈: C3DSourceAccessorGetMutableValuePtrAtIndex C3DSkinPrepareMeshForGPUIfNeeded C3DSkinnerMakeCurrentMesh C3DSkinnerUpdateCurrentMesh __CFSetApplyFunction_block_invoke CFBasicHashApply CFSetApplyFunction C3DAppleEngineRenderScene ... 我没有找到有关如何SCNSkinner手动创建对象的任何文档或示例代码。由于我只是基于以前工作的网格来创建它,所以它应该不太困难。我正在SCNSkinner根据Swift文档创建,并将所有正确的内容传递给init。但是,SCNSkinner我不确定如何设置中的骨骼属性。我将其设置为SCNSkinner要复制的网格物体原件上的骨架,我认为该骨架可以工作……但事实并非如此。设置骨架属性时,它似乎没有分配。分配后立即检查它仍然为零。作为测试,我尝试将原始网格物体的骨架属性设置为其他属性,并且在分配后也保持不变。 任何人都可以对正在发生的事情有所了解吗?或者如何正确地SCNSkinner手动创建和设置对象? 这是我用来手动克隆网格并将其替换为新网格的代码(我在这里没有修改任何源数据-我只是想确保此时可以创建一个副本) : // This is at the start of the app, just so you can see how the scene is set up. // I add the .dae contents into its own node in …