ゲーム用のモデリングツールを作る(その3) 角度の制御

ボーンの回転角を制限する機能を持たせたいと思います。

ボーンの回転で思い出すのが、人間の3Dモデルを動かしてあそべるDAZ Studioというソフト。

デッサンの勉強のために欲しかったPoserが高かったので
その替わりにフリーソフトだったDAZ Studioを使ってみたのですが、
モデルのお姉さんの関節がありえない方向に曲がってしまい、
制御しづらいうえになんか怖かったです。

こんなこともあって、モデリングツールにはボーンの角度制限機能が絶対に欲しいと思うのですが、
角度は360度を超えると0に戻ってしまいます。
角度制限といっても単純な大小比較ではすみそうにありません。

とりあえずこんな方法で解決してみました。

#define M_PI       3.14159265358979323846
#define M_2PI      (M_PI*2.0)

 bool ChkInAngle( double radChk, double radMin, double radMax )
 {
    //radChkが範囲内ならtrueを返します。
    //radMin < radMax
    //radMax - radMin < M_2PIが前提です

    //最小値から最大値の相対角度
    double radRelative = radMax - radMin;

    //最小値を0~2πの範囲に収める
    while ( radMin > M_2PI ) {
       radMin -= M_2PI;
    }
    while ( radMin < 0 ) {
       radMin = M_2PI + radMin;
    }
  
    //最大値も修正
    radMax = radMin + radRelative;

    //チェックする角度が最小値を超えるまで2π足し続ける。
    while ( radChk < radMin ) {
       radChk += M_2PI;
    }

    //そのあとで最大値よりも小さければ範囲内であることになる。
    if ( radChk <= radMax ) {
       return true;  
    }
    return false;
 }

ゲーム用のモデリングツールを作る その2

今制作中の画面。

gamen

1ヶ月もかけて、たったこんだけかー。

制作当初はショートカットキーのみでコマンドをテストできましたが、
機能が増えると自分で割り当てたキーが覚えられなくなり、GUIを付けてみました。

しょぼいなー。
そのうちかっこよくしていく。

最近はボーン動かすのに苦労してます。

行列の使い方がようやくわかりかけてきた気がする。

行列のかけ算で座標原点が移動するようだ、と自分なりに理解したつもり。
そこそこ期待通りの座標変換ができるようになりました。


ボーンには行列よりクオータニオン使うほうが良かったのかな。

クオータニオンがなんなのか、あいかわらずわかってません。
任意軸の回転を表している?

回転だけ?

行列は一つで位置回転スケールを表せたけど、
もしかしてクオータニオンって回転しか表せないのかな。

ゲーム用のモデリングツールを作る


BlenderのXファイルエクスポートが、うまくできません。

試行錯誤してうまくいったり、データ削らないとだめだったり。
なんかすごく気まぐれです。つかれはてた・・・。

Blender自体はとても良いツールだけど、
データ出力できないと都合悪いです。

もっとわがままをいうと、レンダリングの品質がゲームと違うせいでDirectXで表示すると変に見えることがあります。

ということで。
ゲーム用のモデリングとアニメーションができるツールを作ることにしました。

レンダリング品質がゲームと同じなら、チェックしながら作れるし、
フォーマットに悩む必要もないし。

まず手始めに、作りかけだったXファイルを読み込んでみる。

model

モデルがまだ服着てないので、ぎりぎりのフレーミング。
服のモデリングってすごく難しいのですよ。

というかどうやるの?しわとか。

ライブラリに頼らずテキストファイルから自力で読み込めました。

アニメーションも読み込めたー。
アニメは単純な線形補間だけど、できたことにする。


なんだか、手段と目的が逆になってきましたよ。

・・・・ってこともないか。

完成したら、アクションの切り替えとか、武器の持ち替えが簡単にできる(はず)

あたり判定の設定も付けたいなあ・・・

livedoor プロフィール
  • ライブドアブログ