スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ついにスキンメッシュアニメーションが上手く動いたぞ!!

やった!
ついに、スキンメッシュアニメーションをさせる事が出来ました!

【参考画像】
Skin_System6.jpg

(とりあえず、テクスチャを切り替えたりしてみた。)


今回、 ばかな間違いを2箇所ほどしておりました。
両方とも行列を更新する部分です。

まず一つ目。
2つのクォータニオンを補間するところです。

void UpDate(DWORD time){
//中略//
DWORD dif_time = rotate[j].time - rotate[j - 1].time;
DWORD now_time = time - rotate[j - 1].time;
float rate = (float)now_time / dif_time;

D3DXQUATERNION q1, q2, qOut;
q1.w = rotate[j - 1].rw;
q1.x = rotate[j - 1].rx;
q1.y = rotate[j - 1].ry;
q1.z = rotate[j - 1].rz;

q2.w = rotate[j - 1].rw;
q2.x = rotate[j - 1].rx;
q2.y = rotate[j - 1].ry;
q2.z = rotate[j - 1].rz;

D3DXQuaternionSlerp( &qOut, &q1, &q2, rate);

D3DXMATRIX temp;
D3DXMatrixRotationQuaternion( &temp, &qOut );

//中略//
}


途中の-1が要りません。
-1をつけると、同じクォータニオンの補間をとる事になります。

--------------------------
Z軸に30度回転 (j - 1)
Z軸に45度回転 (j)
--------------------------
上記の2つのクォータニオンが配列rotateに格納されてるとします。
2つのクォータニオンを補間すれば、当然 Z軸に37度回転とか出来るんですが、

同じクォータニオンを補間しているので、同じクォータニオンしか生成されません。
これじゃ回転しない訳です。


あと、もう一箇所のミスが下記の様なもの。
-------------------------
mat->_41 = trans[j].tx;
mat->_42 = trans[j].tx;
mat->_43 = trans[j].tx;

-------------------------
全部 txになってる。
(本来ならば、tx、ty、tzと代入する所)

楽しようとしてコピーペーストしまくるから
こんなことになるんですよ。 まったく。



あと最後に、今回大きく変えた所の紹介。
前回は、
--------------------------------------
Start(); //アニメーション開始
Stop();  //アニメーション一時停止
Reset();  //最初から

--------------------------------------
こんな感じのアニメーションさせる関数を用意してたんですが、
コレ、全部無くしました。


代わりに用意したのが下記の関数ひとつ。
-------------------------------------------
SetTime(DWORD d);  //アニメーションの時間を設定
-------------------------------------------
アニメーションの時間を設定すると、
その指定した時間で3Dモデルが動きます。

なので、
----------------------
static DWORD i = 0;
i = (i + 1)% 60;

SetTime(i);

----------------------
こうすればアニメーションが再生されますし、

----------------------
static DWORD i = 0;
i = (i + 59)% 60;

SetTime(i);

----------------------
こうすれば逆再生させる事も出来ます。


----------------------
static DWORD i = 0;
if(特定の条件){
 i = 30;
}

SetTime(i);

----------------------
更にこうすれば、一瞬で特定の姿勢へ変化させる事も可能です。

プログラムの方で制御する事が多くなりますが、その分
とても柔軟になりました。 最高です。


スキンアニメーションは出来たので、次は、
----------------------------
【1】境界球の生成
【2】装備品の着せ替え

----------------------------
このあたりを完全に実装させてみようと思います。(`・ω・´)


~おまけ~
8曲目の 自作曲です。
今回はフィールド(荒野?)っぽい曲にしてみました。

曲をもっと展開させたかったんですけど、 相変わらず それが苦手で、
とりあえず同一フレーズ繰り返して終了するようにしてあります。

楽典とか色々読んで勉強した方が良さそうですね。
コード進行とか勘でやってますし。
(なんという適当さ・・・・!)

※それっぽい和音を鳴らして、
「あ、この和音は違うな。 3番目の音を変えてみよう。 ・・・お、コレだ」
みたいな感じでやってる。


【自作曲】 Wilderness.mid
スポンサーサイト

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

コメント
コメントの投稿
管理者にだけ表示を許可する



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。