トップページ > 記事閲覧
アニメーション 助言希望
名前:名無しさん 日時: 2015/08/17 19:46

ttp://tokiwabooks.web.fc2.com/ このサイトのようなアニメーションをDXライブラリで再現したいです。 助言お願いします。
メンテ

Page: 1 |

Re: アニメーション 助言希望 ( No.1 )
名前:管理人 日時:2015/08/19 01:10

載せていただいた URL では箱が回転して、それがその後三角形の集まりになって動いていますね・・・ DXライブラリで再現するに当たって、何か不明な点があるのでしょうか? とりあえず「3Dで表現された箱が2Dの三角形の集まりに変化する」という点が重要だと思いましたので、 同じような表現をするサンプルプログラムを組んでみました #include "DxLib.h" // モードが切り替わるまでの時間 #define MODE_TIME (60) // 四角形の数 #define QUAD_NUM (3) // 四角形の色 int QuadColor[ QUAD_NUM ][ 3 ] = { { 0, 255, 0 }, { 0, 0, 255 }, { 255, 0, 0 }, } ; // 四角形の座標 int QuadPos[ QUAD_NUM ][ 4 ][ 2 ] = { { { 320, 103 }, { 433, 184 }, { 320, 263 }, { 207, 183 } }, { { 207, 183 }, { 320, 263 }, { 320, 376 }, { 207, 296 } }, { { 320, 263 }, { 433, 184 }, { 433, 296 }, { 320, 376 } }, } ; // 四角形の移動方向 int QuadMove[ QUAD_NUM ][ 2 ] = { { 0, -1 }, { -1, 1 }, { 1, 1 }, } ; // WinMain関数 int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int Mode ; int Move ; int MoveX, MoveY ; int Counter ; int ModelHandle ; int i ; // ウインドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // 背景色を真っ白にする SetBackgroundColor( 255,255,255 ) ; // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ) ; // 箱モデルを読み込む ModelHandle = MV1LoadModel( "Cube.mqo" ) ; // カメラの設定を行う SetCameraPositionAndTarget_UpVecY( VGet( 0.0f, 500.0f, -500.0f ), VGet( 0.0f, 0.0f, 0.0f ) ) ; SetupCamera_Ortho( 600.0f ) ; // モードを3Dモードに初期化 Mode = 0 ; // 時間計測用変数を初期化 Counter = 0 ; // メインループ(何かキーが押されたらループを抜ける) while( ProcessMessage() == 0 ) { // 画面のクリア ClearDrawScreen() ; // モードによって処理を分岐 switch( Mode ) { case 0 : // 3Dモードの場合 // 時間を進める Counter ++ ; // モードが切り替わる時間になっていたら2Dモードに切り替える if( Counter == MODE_TIME ) { // モードを2Dモードにする Mode = 1 ; // 時間計測用変数を初期化 Counter = 0 ; // 移動距離を初期化 Move = 0 ; } // 箱の回転角度をセット MV1SetRotationXYZ( ModelHandle, VGet( 0.0f, DX_PI_F / 4.0f + DX_PI_F * 2.0f / MODE_TIME * Counter, 0.0f ) ) ; // 箱を描画 MV1DrawModel( ModelHandle ) ; break ; case 1 : // 2Dモードの場合 // 時間を進める Counter ++ ; // モードが切り替わる時間になっていたら3Dモードに切り替える if( Counter == MODE_TIME ) { // モードを3Dモードにする Mode = 0 ; // 時間計測用変数を初期化 Counter = 0 ; } // 経過時間がモードが切り替わるまでの時間の半分を過ぎているかどうかで移動方向を分岐 if( Counter >= MODE_TIME / 2 ) { Move -= 3 ; } else { Move += 3 ; } // 四角形を描画 for( i = 0 ; i < QUAD_NUM ; i ++ ) { // 四角形の移動距離を計算 MoveX = QuadMove[ i ][ 0 ] * Move ; MoveY = QuadMove[ i ][ 1 ] * Move ; // 四角形を描画 DrawQuadrangle( QuadPos[ i ][ 0 ][ 0 ] + MoveX, QuadPos[ i ][ 0 ][ 1 ] + MoveY, QuadPos[ i ][ 1 ][ 0 ] + MoveX, QuadPos[ i ][ 1 ][ 1 ] + MoveY, QuadPos[ i ][ 2 ][ 0 ] + MoveX, QuadPos[ i ][ 2 ][ 1 ] + MoveY, QuadPos[ i ][ 3 ][ 0 ] + MoveX, QuadPos[ i ][ 3 ][ 1 ] + MoveY, GetColor( QuadColor[ i ][ 0 ], QuadColor[ i ][ 1 ], QuadColor[ i ][ 2 ] ), TRUE ) ; } break ; } // 裏画面の内容を表画面に反映 ScreenFlip() ; } // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; } 載せていただいた URL のサイトでは箱の回転が滑らかだったり、その後の三角形が回転したり縮小したり していますが、それを再現しようとするとプログラムが長くなってしまうので箱の回転は堅い感じに、 2D表現では3角形が回転するのではなく箱の各面が画面中心から離れていくという表現になっています プログラム中で使用している Cube.mqo はこちらにアップしましたので、よろしければ実行してみてください https://dxlib.xsrv.jp/temp/Cube.mqo
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存