具体的には、AIの作成でピッチ、ロール、ヨーの操作を駆使して、方向ベクトルの方角に向きたいです。
実際にコードを組んでみたのですが、思うように動きません。
どこが間違っているのでしょうか?
飛行機がまったく方向転換しなくなる事が多々有り、28行目から上が間違っているのか・・・
//目的地の設定
VECTOR Destination =VGet(10000,0,0);
//目的地の方向へ向きを変えたい
//目的地の方向ベクトル
VECTOR DestinationDirection = VNorm(VSub(Destination , ControlAircraft->GetPosition()));
//ワールド座標系から飛行機の座標系へ変換する回転行列
MATRIX PredeterminedAngle = MGetIdent();
PredeterminedAngle.m[0][0] = ControlAircraft->AxisX.x;
PredeterminedAngle.m[0][1] = ControlAircraft->AxisX.y;
PredeterminedAngle.m[0][2] = ControlAircraft->AxisX.z;
PredeterminedAngle.m[1][0] = ControlAircraft->AxisY.x;
PredeterminedAngle.m[1][1] = ControlAircraft->AxisY.y;
PredeterminedAngle.m[1][2] = ControlAircraft->AxisY.z;
PredeterminedAngle.m[2][0] = ControlAircraft->AxisZ.x;
PredeterminedAngle.m[2][1] = ControlAircraft->AxisZ.y;
PredeterminedAngle.m[2][2] = ControlAircraft->AxisZ.z;
//目的地の方向ベクトルを回転させる。これで飛行機から見た方向ベクトルになるはず。(飛行機の正面に目的地があった場合、0.0 , 0.0 , 1.0
DestinationDirection = VNorm(VTransform(DestinationDirection,PredeterminedAngle));
//目的地の方向へ45度圏内に入っていなければ、方向を変える
if( 0.5 > VDot(DestinationDirection,ControlAircraft->GetDirection())){
if( 0 < DestinationDirection.x ){//右側
ControlAircraft->Roll(0.5);
if( 0 < DestinationDirection.y ){
ControlAircraft->Pitch(1.0);
}
}else{
ControlAircraft->Roll(-0.5);
if( 0 < DestinationDirection.y ){
ControlAircraft->Pitch(1.0);
}
}
}