2
コードでSceneKit SCNSkinnerオブジェクトを作成する方法は?
iOS 8のSceneKitを使用するSwiftアプリがあります。スケルトンによって制御されるメッシュを含む.daeファイルからシーンをロードします。実行時に、テクスチャ座標を変更する必要があります。変換の使用はオプションではありません-メッシュ内の各頂点に対して異なる完全に新しいUVを計算する必要があります。 SceneKitではジオメトリが不変であることを知っています。推奨されるアプローチは手動でコピーを作成することです。私はそれをやろうとしていますがSCNSkinner、コードを再作成しようとするといつもクラッシュします。クラッシュはEXC_BAD_ACCESS内部C3DSourceAccessorGetMutableValuePtrAtIndexです。残念ながら、これのソースコードはないので、なぜそれがクラッシュするのか正確にはわかりません。SCNSkinnerメッシュノードに接続されているオブジェクトに絞り込みました。設定しないと、クラッシュせず、問題なく動作しているように見えます。 編集:これはクラッシュのより完全なコールスタックです: C3DSourceAccessorGetMutableValuePtrAtIndex C3DSkinPrepareMeshForGPUIfNeeded C3DSkinnerMakeCurrentMesh C3DSkinnerUpdateCurrentMesh __CFSetApplyFunction_block_invoke CFBasicHashApply CFSetApplyFunction C3DAppleEngineRenderScene ... SCNSkinnerオブジェクトを手動で作成する方法に関するドキュメントやサンプルコードは見つかりませんでした。私は以前に機能していたメッシュに基づいて作成しているだけなので、それほど難しくはないはずです。SCNSkinnerSwiftのドキュメントに従ってを作成し、正しいものすべてをinitに渡します。ただし、SCNSkinner設定方法がわからないスケルトンプロパティがあります。SCNSkinnerコピーしているメッシュの元のスケルトンに設定しましたが、これはうまくいくと思いますが、実際はそうではありません。スケルトンプロパティを設定すると、割り当てられていないように見えます。割り当ての直後にチェックすると、まだnilであることがわかります。テストとして、元のメッシュのスケルトンプロパティを別のプロパティに設定しようとしましたが、割り当て後も変更されませんでした。 誰かが何が起こっているのかについて何か光を当てることができますか?または、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 the scene. …