« きみは いつも おなじふくだな! | トップページ | 食 »

2013年5月28日 (火)ICEを使ってみる 第10回 カーブとジオメトリの交点

おはようございます、本日の当番モーションデザイナーのY.Nです。

毎度のことながら、ICEについて書いていきます。
本日はベジェカーブとジオメトリの交点を調べてみます。

といっても厳密な意味での交点ではなく、ちょっと不正確ではあるものの
お手軽に入手できる情報で代替するといったものになります。
ということで、次のような仕組みを想定しています。

カーブを細かく分割→分割区間ごとに当たりを判定→当たっている点を取得

上記各パートごとにどんな仕組みを作っていけばいいか考えていき
最終的に統合するような流れですすんでみます。


以下、本日の流れです。
1.カーブを複数区間に分割する
2.ベクトルとジオメトリの交点を取得する
3.ベクトル配列とジオメトリの交点を取得する

■1.カーブを複数区間に分割する
まずはカーブをいじっていくことにします。

今回は4点ベジェを使用します。
ICEには4点ベジェを作成するノードが用意されているのでそれを
使うと楽に作成できます。
とりあえず適当な4点で作るとこんな感じになります。

ICEツリー図
2013_0527_01_2

結果
2013_0527_02_2

緑色の点が適当に与えてた4点、ピンクがベジェカーブ上の1点です。
カーブが見えていないので、初めて使うときは面食らうかもしれません。
しかしこれは媒介変数Tに特定の値が入力されているためです。

Tが0~1の間を変化する間にどういった軌道を取るかを示した物が
普段よく目にするカーブのラインになるのですが、Tが特定の1つの値の
場合はそのライン上の1点しか返せません。

今回はカーブを細かく分割した後、そのパーツを使いたいと思います。
今は世界中でICE上級者の皆さまがカーブを等間隔で分割するいろんな方式を
公開されていますが、今回は特に等分割にこだわっていません。
なもんで、Build Linearly Interpolated Arrayで簡単に分割してみます。

ICEツリー図
2013_0527_03_2


結果
2013_0527_04

カーブに沿って点が複数表示されてラインがその間に引かれました。
図の青色の部分のように個別の分割点をIDで取得することもできます。
ICEツリーでGroupCommentで囲っている部分がID指定をしている部分です。

■2.ベクトルとジオメトリの交点を取得する
細分化した各区間の当たり判定を取る前に、
1区間の当たりを判定してみましょう。

カーブの分割情報から一旦離れて、まずは単純に2点で与えられる線分ABと
オブジェクトとの交点を調べてみます。

A点(0,1,0)とB点(3,6,9)と球Xとの交点を調べてみます。
Raycastを使えば簡単に調べられますね。
ABには長さがあるので、そこも考慮に入れます。

ICEツリー図
2013_0527_05


結果
2013_0527_06
2013_0527_07

点A、Bとそれを結ぶ線分ABが緑色で表示されています。
ピンク色は線分ABと球の交点Pです。
線分ABと球の交わったところに点Pが表示されているのが判ります。
オレンジ色は線分ABと球の当たり判定結果を表していて
1だと当たっていて、0だと当たっていないということになります。

注意しないといけないことが一つ。
線分ABと球が接触していない時も点Pの座標が返されています。
無効な値を使ってしまうことにならないよう注意したいところです。

■3.ベクトル配列とジオメトリの交点を取得する
先ほど当たり判定を取るのにRaycastを使用しましたが、このノードは
都合がいいことに入力ポートが配列をサポートしています。
なので、複数区間の判定をするのにループを使う必要がありません。

というわけで単純に1番と2番を組み合わせるだけでうまく動く、、、ハズ。

ICEツリー図
2013_0527_08


これまでのツリーをくっつける際に次の2つの改変をしています。
1つめ。一つ前のIDと比較する際におかしなことが起こらないよう、
ベジェカーブ上の一つめの点を計算で使用しないようにしたり、
Raycastの判定でTrueを返す点だけPositionを取得するようにしたり、
などしています。
で、結果ですが全くうまくいきません。
カーブとジオメトリの交点は今回黄色で表していますが、こいつが原点から動いていません。
しかし、当たり判定の結果には1が含まれています。

結果
2013_0527_09


どうやら、Raycastは配列の1つめでHitがTrueを返さないと
正しく動かないようです。

ICEツリー図
2013_0527_12


結果
2013_0527_13



Hitの判定自体は正しく返っているようなのでそれを利用して
配列の1つ目がTrueになるように仕向けてみます。

ICEツリー図
2013_0527_10_3


結果
2013_0527_11


どうやらうまくいった様子。
ほんとはこれを使って何かするところまで作ってみたかったのですが
長くなってきたので今回はこの辺で終わらせておきます。
次回、いい使い道があったら使ってみます。

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2013/05/ice10-b9bd.html" );document.write( "result = " , result );&media=https%3A%2F%2Ffarm8.staticflickr.com%2F7027%2F6851755809_df5b2051c9_z.jpg&description=Next%20stop%3A%20Pinterest">

| | コメント (0) | トラックバック (0)

« きみは いつも おなじふくだな! | トップページ | 食 »

モーションデザイナー」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: ICEを使ってみる 第10回 カーブとジオメトリの交点:

« きみは いつも おなじふくだな! | トップページ | 食 »