変更点が少なく済んだのでフレーム単位のブレンド率の変更の機能を実装してみました
http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用
(中身を既存のライブラリのファイルに上書きして、BCCをお使いの
場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)
追加した関数は以下の関数です
// アタッチしているアニメーションのブレンド率を設定する( フレーム単位 )
int MV1SetAttachAnimBlendRateToFrame( int MHandle, int AttachIndex, int FrameIndex, float Rate, int SetChild ) ;
int MHandle : モデルハンドル
int AttachIndex : モーションのアタッチ番号
int FrameIndex : ブレンド率を変更するフレーム番号
float Rate : ブレンド率
int SetChild : 指定のフレームの子フレームにも同じ値を設定するかどうかのフラグ( TRUE:設定する FALSE:設定しない )
MV1SetAttachAnimBlendRate 関数のサンプルプログラムは立っているモーションと右腕を前に
出す体勢のモーションを全体的にブレンドするものでしたが、それをちょっと弄って右腕だけ
ブレンドするようにすると以下のようになります
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle, AttachIndex1, AttachIndex2 ;
float Rate ;
ChangeWindowMode( TRUE ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 画面が切り替わるのをちょっと待つ
WaitTimer( 1000 ) ;
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ;
// 3Dモデルの立っているアニメーション( 4番目のアニメーション )をアタッチする
AttachIndex1 = MV1AttachAnim( ModelHandle, 4, -1, FALSE ) ;
// 3Dモデルの手を前に出しているアニメーション( 5番目のアニメーション )をアタッチする
AttachIndex2 = MV1AttachAnim( ModelHandle, 5, -1, FALSE ) ;
// 立っているアニメーションのブレンド率をセット
MV1SetAttachAnimBlendRate( ModelHandle, AttachIndex1, 1.0f ) ;
// 手を前に出しているアニメーションのブレンド率をセット
MV1SetAttachAnimBlendRate( ModelHandle, AttachIndex2, 0.0f ) ;
// 描画先を裏画面に変更
SetDrawScreen( DX_SCREEN_BACK ) ;
// 4番目のアニメーションから5番目のアニメーションに徐々に移行する
for( Rate = 0.0f ; Rate < 1.0f ; Rate += 0.01f )
{
// 画面をクリア
ClearDrawScreen() ;
// 立っているアニメーションのブレンド率をセット
MV1SetAttachAnimBlendRateToFrame( ModelHandle, AttachIndex1, 22, 1.0f - Rate, TRUE ) ;
// 手を前に出しているアニメーションのブレンド率をセット
MV1SetAttachAnimBlendRateToFrame( ModelHandle, AttachIndex2, 22, Rate, TRUE ) ;
// モデルの描画
MV1DrawModel( ModelHandle ) ;
// 裏画面の内容を表画面に反映する
ScreenFlip() ;
}
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
よろしければお使い下さい