導入:::::::::::前回の続きです。オブジェクトの配置情報と頂点バッファを使ったバウンディングボックスを作成しオブジェクトにフィットするよう衝突形状の配置を行いました。これができるならば、その位置にモデルを描画することもできるはずです。クラスを用意し描画用のノードにアクセスする情報を持たせました。使ったノードの描画を行えるようにしました。場所に...オブジェクトが描画できるようになりました。配置できているようですね。...ちょっと遊ばせてください。次に示す通りオブジェクトをセッティングしました。再生!ぶつかる!ドミノ倒し青色がスリープ中、ピンク色がアクティブなオブジェクトを表しています。描画モードを切り替えると、衝突形状ではなくオブジェクトを描画します。これにテクスチャを貼ったり、複雑なモデルに置き換えることも可能です。いやー、楽しいですね。設定できるようにしましょう。カーソルというものを用意したいと思います。そこでひとまず、ラインを描画できるようにしましょう。いうことでグリッドを描画する機能として利用しました。動作しているようです。3Dカーソルの描画も実装しました。グリッドを作成する際、プリミティブごとの編集が大変煩雑だったため(一つひとつ選択して修正するというもの...)ついでに、ノードツリーを複数選択可能にして、一挙に選択したノードのプロパティを編集できるようにしました。これは今後の作業効率がグンと上がりそうな修正ですね。早い時期に対応していても良かったと思いました。機能を使って実現しました。詳細はコチラ、デモのソースコードをジッと見つめれば誰でも対応できます。素晴らしいですね!これを独自で作るとなると結構大変なんです。)では、3Dカーソルもできたことですし、続いて画面をクリックすることで衝突形状を選択するという操作ができるようにしてみましょう。予定通りには進まないというか...まずはコンテキストメニューの設置から実装しました。メニューが現れ、各種コンストレイントの追加ができるというものを用意しました。(まだ、どれも機能しません。して再度右クリックで出ないようにします。レイキャストを行う前に、点結合のコンストレイントの描画を行えるようにしました。デバッグ時にこれが確認できないといけないので、先に実装したというところです。カーソルの位置に追加されるという機能の実装に取り掛かれます。3Dカーソルの位置、そして何を追加したいかという情報です。コンテキストメニューと3Dカーソルより、「何をどこに追加したいか」はクリアしました。Bulletの衝突判定(レイキャスト)を使って実現したいと思います。視点から画素に向かってレイ(光線)を放つ...、デモと同じですね。右クリックするとレイ(光線)を計算する部分を実装しました。頭悪いのでちょっと悩みましたが、次のコードで正しく求められているようです。判定の後、レイテストを行う処理を加えます。...結果から言うと、上記のコードは正しく動作しませんでした。らしい方向にレイが出るけど、完全な方向を向いていませんでした。参考に実装して解決しました。]]>確認した結果です。シフトキーを押すことで、複数選択が可能です。選択したオブジェクトの色が緑色に近づきます。動作しているようです。レイテストは簡略化して次のコードで解決しました。コンストレイントの追加機能を実装します。...の前に、3Dカーソル位置を左クリックで設置できるようにしました。現在の3Dカーソル位置を通る視線に垂直な平面とレイとの交点に移動するというものです。レイが求められているので対応は簡単ですね。参考に平面と直線との交点を求める関数を次に示します。]]>これは正しく機能しました。(これダメだったらまずいでしょう。見かける問題ですし、過去何回か解いてますから。)<実装>やっと、3Dカーソルの位置に選択したオブジェクトを結びつける点結合コンストレイントの設置が確認できました。(良かった)コンストレイントだけを描画した結果がこちら↓で、さっそく使い勝手が悪いと感じました。試す前に次の機能が欲しいです。(選択したオブジェクトをマウスで直感的に移動できる機能のこと)これがないと、セッティングしたはいいけど、どんな動きをするのか確認できない。コンストレイントを設置したままリセットする機能せっかくコンストレイントを苦労して設置したのに、停止するとこれらの情報が吹っ飛びます。コンストレイントをそのままに、最初の状態に戻してそこから再生できるようにしたい。カーソルをもっと配置しやすくしてほしい。3Dカーソルを移動できるようにしないと話にならない。設定したコンストレイントの情報を保存できるようにしたい。この機能が無いと編集する気も起きない。(ファイルフォーマットを考えないとまずそう)そのほか、コンストレイントのプロパティを実行時に編集したいとか...で、今は点結合だけですが、コンストレイントの種類を増やすのはその後でいいと思います。設置を達成したので、ここで話を切りたいと思います。次回は上記で示した使い勝手の悪いところを1つずつ修正していきます。