2007年11月22日
新機能その1「水中か?」
サメシリーズの仕上げに入ってますが、今回から次の機能を追加する予定でテストしていまーす。
1.水中かどうかのチェック
マンタは基本的には水平移動を前提としていたので、上下の移動範囲は+-1mと固定的に狭い範囲しか移動させませんでした。
これは上下に大きく移動させると、フレキシブルのヒレが垂れてしまい、綺麗に羽ばたかなくなってしまうからなんです。
しかしサメシリーズでは、このような制約も無くなるので、可能な範囲で大きく上下に動くようにしても良いと思ってます。
そこで問題になるのは、水中から飛び出してしまうのでは?と言う事です。
勿論水中だけでは無く、地中へ深く入り込んでしまう事も考えなくてはならないでしょう。
その意味で、上下動の範囲を大きくすると言う事は、少々厄介な問題でもあったんです。
でも、やはり対応もしたいので、次のような関数を使って補正をしようと考えてます。
<水中か?>
float llWater(vector offset) と言う関数があります。これはだいぶ前から目をつけていた関数でして、海洋生物系なら使ってみたい関数の筆頭格でした。
これはoffsetで指定した相対座標地点の海面の高さを求める関数です。
海面の高さ-目標地点の高さ>0ならその地点は水中にあると言う事になると思います。
逆に海面の高さ-目標地点の高さ<0ならその地点は海上へ出てしまう事になると思います。
そこで、移動目標のZ座標を求める場合、目標地点のZ座標が海上に出てしまう場合は、Zの相対値を
目標地点の海面の高さ-現在地点の高さ
で補正してやる必要が発生する事になります。
同様に地面に潜らないようにするには、float llGround(vector offset) と言う関数で、相対座標地点の地面の高さを求める事ができます。
目標地点の地面の高さ-現在地点の高さ
で補正すれば良いと思います。
ただし、サメが水中で使用されるとは限りません。水族館等では実際には空中を飛んでいる訳で、その場合は最初から水中かどうかの補正はしてはいけないことになるでしょう。
と言う事で、設定時に「水中での使用」か「水中外での使用」かをあらかじめ利用者に設定してもらわないといけない事になってしまいます。これも理解しづらいかも?デフォルトは「水中以外での使用」にすべきかなー?
ただ、この機能を実現すると、目標地点が水面になった場合のみ、到着時に違ったアクションをさせるなんて事も可能と思います。例えば到着時に水面へジャンプさせる事もできると言う事です。まあ、ジャンプは水中からでもできるのですが・・・
他にもザトウクジラとかであれば水面がターゲットになった時のみ、到着時に潮を吹かせたり、ブリッジをさせたり、ヒレや尾びれを動かして水面を叩かせたりもできると思います。面倒だから今はやらないけど。。。
あ~!!!大変な事に気がついてしまった。
目標地点が地面の下かどうか?チェックした場合、例えばSASUKE SEA GARDENのような地下を掘った場所での使用時に問題がでるかも?出るな。。。うん。絶対に出る。四方が地面に囲まれているのだから。
うーん。。。この場合はどうしようかな?目標地点が地面の下で補正できない状況の場合になるから・・・乱数での計算やり直しかな?
遊泳範囲の設定を適切に行ってくれていれば発生しないケースだからな。そうだ。そうだ。そうに違いない。
と言う事で、こんな機能を追加してテスト中です。
一応今の所は、次のような狭い場所で泳がせても、地面の下までは入り込まず、両側の壁の中に消える事も無いようです。
上手くいくかな?

次回は追加機能<その2>を紹介しますね。たいした機能では無いですが。。。
1.水中かどうかのチェック
マンタは基本的には水平移動を前提としていたので、上下の移動範囲は+-1mと固定的に狭い範囲しか移動させませんでした。
これは上下に大きく移動させると、フレキシブルのヒレが垂れてしまい、綺麗に羽ばたかなくなってしまうからなんです。
しかしサメシリーズでは、このような制約も無くなるので、可能な範囲で大きく上下に動くようにしても良いと思ってます。
そこで問題になるのは、水中から飛び出してしまうのでは?と言う事です。
勿論水中だけでは無く、地中へ深く入り込んでしまう事も考えなくてはならないでしょう。
その意味で、上下動の範囲を大きくすると言う事は、少々厄介な問題でもあったんです。
でも、やはり対応もしたいので、次のような関数を使って補正をしようと考えてます。
<水中か?>
float llWater(vector offset) と言う関数があります。これはだいぶ前から目をつけていた関数でして、海洋生物系なら使ってみたい関数の筆頭格でした。
これはoffsetで指定した相対座標地点の海面の高さを求める関数です。
海面の高さ-目標地点の高さ>0ならその地点は水中にあると言う事になると思います。
逆に海面の高さ-目標地点の高さ<0ならその地点は海上へ出てしまう事になると思います。
そこで、移動目標のZ座標を求める場合、目標地点のZ座標が海上に出てしまう場合は、Zの相対値を
目標地点の海面の高さ-現在地点の高さ
で補正してやる必要が発生する事になります。
同様に地面に潜らないようにするには、float llGround(vector offset) と言う関数で、相対座標地点の地面の高さを求める事ができます。
目標地点の地面の高さ-現在地点の高さ
で補正すれば良いと思います。
ただし、サメが水中で使用されるとは限りません。水族館等では実際には空中を飛んでいる訳で、その場合は最初から水中かどうかの補正はしてはいけないことになるでしょう。
と言う事で、設定時に「水中での使用」か「水中外での使用」かをあらかじめ利用者に設定してもらわないといけない事になってしまいます。これも理解しづらいかも?デフォルトは「水中以外での使用」にすべきかなー?
ただ、この機能を実現すると、目標地点が水面になった場合のみ、到着時に違ったアクションをさせるなんて事も可能と思います。例えば到着時に水面へジャンプさせる事もできると言う事です。まあ、ジャンプは水中からでもできるのですが・・・
他にもザトウクジラとかであれば水面がターゲットになった時のみ、到着時に潮を吹かせたり、ブリッジをさせたり、ヒレや尾びれを動かして水面を叩かせたりもできると思います。面倒だから今はやらないけど。。。
あ~!!!大変な事に気がついてしまった。
目標地点が地面の下かどうか?チェックした場合、例えばSASUKE SEA GARDENのような地下を掘った場所での使用時に問題がでるかも?出るな。。。うん。絶対に出る。四方が地面に囲まれているのだから。
うーん。。。この場合はどうしようかな?目標地点が地面の下で補正できない状況の場合になるから・・・乱数での計算やり直しかな?
遊泳範囲の設定を適切に行ってくれていれば発生しないケースだからな。そうだ。そうだ。そうに違いない。
と言う事で、こんな機能を追加してテスト中です。
一応今の所は、次のような狭い場所で泳がせても、地面の下までは入り込まず、両側の壁の中に消える事も無いようです。
上手くいくかな?

次回は追加機能<その2>を紹介しますね。たいした機能では無いですが。。。
Posted by Gonbe Shan at 22:59│Comments(0)
│製作状況紹介
上の画像に書かれている文字を入力して下さい
|
|
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。