はじめまして、よろしくおねがいします。
プログラミング暦は1年くらいです。
「サンプルプログラムの迷路を3Dで表示」のブロックとブロックの間を滑らかに移動するタイプを改造していて
ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=past&no=2560
こちらのいっちさんのカメラの平行移動や球面移動を利用して、カメラの制御と移動をしています。
組み込むことは出来たのですが、そこにsin波を使って
ゆっくり動き始めてゆっくり止まるにしようとしたら行き詰ってしまいました。
いっちさんのプログラムはこの行はこうゆうものぐらいにしか理解しおらず
sin波も振幅ぐらいしかいじるところはないと思っていたので解決への糸口がなかなか見つかりません。
適切な移動量を得るにはどうしたらいいでしょうか?よろしくお願いします。
//「迷路を3Dで表示」sin波を使って移動
case 1 : // 前進中状態
// カウントを進める
Count ++ ;
// カメラの座標を移動途中の座標にする
//------------------------------------------------------------------------------
//迷路を3Dで表示
//CamPos = VGet( x * BLOCK_SIZE, CAMERA_Y, z * BLOCK_SIZE ) ;
//CamPos = VAdd( CamPos, VScale( CamDir, BLOCK_SIZE * Count / MOVE_FRAME ) ) ; //元のもの
//こっちにはsin波を使うことができた
//CamPos = VAdd( CamPos, VScale( CamDir, sin( DX_PI / 2 / MOVE_FRAME * Count ) * BLOCK_SIZE )); //sin波
//CamTarg = VAdd( CamPos, CamDir ) ;
//------------------------------------------------------------------------------
//いっちさんの移動 move_rate = BLOCK_SIZE / MOVE_FRAME したもの
//camera.target = VAdd( camera.target, VScale( VNorm( camera.position ), -move_rate ) );
//sin波を使ったもの
camera.target = VAdd( camera.target,
VScale( VNorm( camera.position ),
-sin( DX_PI_F / 2.0f / MOVE_FRAME * Count ) * BLOCK_SIZE ));
// カウントが移動時間に達したら実座標を移動して入力待ち状態に戻る
if( Count == MOVE_FRAME )
{
x += movx ;
z += movz ;
State = 0 ;
Count = 0 ;
}
break ;
//カメラの座標と角度をセットする
SetCameraPositionAndTargetAndUpVec( VAdd( camera.target, camera.position ), camera.target, Camera.head );