ライブラリが認識した指先位置にオブジェクトをリアルタイムで配置するようにしてみました。これを初期位置に手の姿勢推定を頑張っていこうと思います。倍してそのデータにフィットするように作らなければなりません。フィットするように調整してみました。そのままだと人指と親指が長すぎたので調整、だいたいフィットするような大きさであることを確認しました。このモデルを大きさの基準として利用します。中でオブジェクトを作り、関節のコンストレイントまで設定出来た方が良いなとずっと考えてきました。調査し始めた時期が今から2年と2ヶ月前の058話のころで、当時モデルデータのファイルフォーマットを考えていました。そこで緊急でほしい今現在、名前解決を入れてみようという発想に至ったわけです。用語だとコンピュータやネットワーク機器につけられた名前からアドレスを割り出すこと、なのですが今回はシーンにおける役割を名前から割り出すことの意味で使ってみようと思います。あるオブジェクト名に自分はコンストレイントである、コンストレイントタイプは何で軸はどこを向き、何と何を結びつけるコンストレイントである。こんな感じの情報を名前に設定します。それなりに名前解決用のルールを短めに設定する必要があります。オブジェクトの情報も利用できると良いです。コンストレントならば、姿勢行列から軸の方向を決定するなどですね。現在はどのようにして物理オブジェクトを生成しているのか見て行きましょう。2年前になりますが064話にて、メッシュの中心とバウンディングボックスの形でシェイプを作成、これに付随する形で生成元のメッシュを描画する仕組みを作りました。コンバートするで得られます。ファイル出力するんですね。SceneDataの集合として構成されます。描画はSceneDataの下にぶら下がるNodeを階層的に見ていき、DrawNodeとノードの描画を行なう。ノードを特定するNodeIndexによって特定される。いうところのオブジェクトと等価である。読み込んだ時にのみ、このオブジェクトに対して物理オブジェクトを生成します。中に書き込まれている物理オブジェクトとコンストレイントの情報を復元します。あの、途中ですみませんが、息抜きでチェスやっていたらポーンだけでキングを裸にできたので...キング自ら敵のキングに歩み寄る。はい、ほんとすみません話を戻します。読み込んで物理オブジェクトを生成する過程にて名前解決を行なうことになります。物理オブジェクトの自動生成コードを確認していますが、よくこんなの調べたなぁと思う所あり。一件不具合を確認、オブジェクトのPivotがバウンディングボックスの中心にない場合に物理オブジェクトに付随するモデルの位置が、その中心からずれた量だけ移動しています。してファイルに保存しているのでこれを描画時のオフセット行列にかけておきます。→これで解決しました。上がってしまったせいで、うまく動かなくなってしまいました。これを別の画像コンバータに変更し、正しく動作することを確認しました。コンストレイントであることを証明する名前規則を決めます。有効なコンストレイントタイプであることが条件です。結ぶコンストレイントが出来るというものなのですが実際に出来るか試してみます。テストデータを用意しました。今は何もしていないのでこんな事になります。読み込んだ後に行なう物理オブジェクト構築にて名前解決を行うと...実装メモちょっと恐る恐る実装している感じですが、単にオブジェクト追加をスキップするとこうなります。オブジェクトにはシーンで一意の名前がランダムで割り当てられています。この情報を使ってオブジェクトを割り出し、コンストレイントは連結情報を復元しています。そもそもノードの情報からオブジェクトを作成していますので、この時に関連付けを行っておけばよいのです。位置関係を示す行列2つです。難しくなってきたので一回トライさせてください。して、適当な位置でコンストレイントを追加します。よし、位置がズレてはいますがコンストレイントが作れているみたいですね。正しい位置にコンストレイントが作られるように調整してみます。今度はコンストレイントのタイプを変えてみます。今度は問題なく一発で正しい位置にコンストレイントが作成されました。ついても調べてみます。CompoundShapeついでなので、シェイプの結合も名前規則で解決できるようにしてそれなりに複雑な形状を生成出来るようにしたいと思います。Compound-ParentObject-NodeNameこんな名前規則でどうでしょうか。規則を見つけたらオブジェクトは作成するが、作成後に親オブジェクトに対してCompoundの子供にして下さいとお願いするのです。子供も一つではなく複数可能とします。親指定ごとにCompoundしますが、孫まで作る場合について困ることが出てきます。親がすでに祖先に組み込まれてしまった場合、親が見つかりません。この時は親の名前で祖先が取得できるように動作を考慮します。作成のコードを書いていました。必要なのは親オブジェクトと複数の子オブジェクトのようです。子を願うオブジェクトを見つけた場合は、無視しコンストレイントを追加する時に、親オブジェクトと子オブジェクトリストを構築します。最後にこれらの情報から、Compoundオブジェクトを作成しようと思います。いや、Compoundオブジェクトを作成した後にコンストレイントを作成することにしようと思います。オブジェクトが自動生成されることを確認できました。テスト用に少し複雑なオブジェクトを用意したいと思います。このようなモデルを作成し、名前解決でタイヤ以外の部位をCompoundしてみます。結合されたオブジェクトに対してコンストレイントを設定できるか試してみます。ヒンジで繋いだので、タイヤが軸回転します。不満点があるのが、コンストレイントの軸方向です。後から編集して正しい軸方向に直しましたが、最初から指定できるとうれしい。コンストレイントの元となっているオブジェクトの姿勢からこうしたコンストレイントの姿勢、軸方向を設定できるようにしたいと思います。オブジェクトの姿勢行列のX軸に合わせる、という方法で解決しました。他のコンストレイントについても同じようなことをしたいと思います。同じようなことしました。ついてコンストレイントの元となるオブジェクトの姿勢に依存して、コンストレイントの姿勢が決まるようになることを確認しました。あとひとつ、シェイプについても名前解決したいと思います。これをオブジェクトの名前から求めたいと思います。メッシュ追加時に勝手にリネームされますのでこれを使ってみたいと思います。