0

MacOS で SceneKit を使用して Collada ファイルをロードし、シーン ノード プロパティを取得して、独自のシーン グラフで使用したいと考えています。

頂点、法線、変換マトリックス、マテリアル プロパティなど (テクスチャ ファイル名を除くすべて) に簡単にアクセスできます。

テクスチャのファイル名が SCNMaterialProperty クラスのインスタンスに格納されることを期待します。ドキュメントから:

SCNMaterialProperty クラスは、テクスチャと、テクスチャをオブジェクトに適用する方法を指定する一連の属性をカプセル化します。

しかし、ソース ファイル名自体ではなく、テクスチャを表す NSImage しか取得できません。

どこかにあるはずです - XCode の collada ビューアーのインスペクターには、ファイル名も表示されます (SCNMaterialProperty のプロパティと共に):

ここに画像の説明を入力

SceneKit オブジェクト グラフでテクスチャのファイル名にアクセスするにはどうすればよいですか?

4

1 に答える 1

1

そのための API はありません。デバッグ目的で純粋に興味がある場合は、ハッキングするのはそれほど難しくありません。基礎となる SCNMaterialProperty は C3DImageRef であり、 を使用して取得できます-[SCNMaterialProperty getC3DImageRef]。そのレイアウトは次のようになります。

struct __C3DImage {
  void *isa;
  uint32_t junk;
  uint32_t retainCount;
  NSDictionary *entityProperties;  // e.g. contains the kIDKey.  Nothing else for a material property.
  NSURL *path;
  ...
}

したがって、いくつかのキャストとオフセットを使用すると、パスを取得できます。ポインターのサイズが変化するため、32 ビットと 64 ビットではオフセットが変化することに注意してください。

このすべての情報は、class-dumpから取得できます(正確な構造体などを含むヘッダーを生成できます)。しかし、それはすべて恐ろしく壊れやすいので、それを使用するコードを決して出荷しないでください. この情報を適切に取得するための API の追加を要求するバグ レポートを提出してください。

于 2012-11-18T06:37:33.103 に答える