はじめまして
お世話になります
Visual Studio 2008 Pro にて
VisualC#用DXライブラリ(ver3.04b)を用いて、3Dゲームの制作を行っております。
今回書き込んだのは、
DebugビルドReleaseビルドの両方が問題なく通り、VSでのデバッグから起動した場合ならば問題なく動作するが、
非デバッグ環境で起動した場合、目的とは違った動作をする。といった症状に悩まされているためです。
目的の動作は
「3Dモデルを所定の位置にセットする」
「3Dモデルの傾きを設定する(Z軸回転→X軸回転→Y軸回転の順に処理する)」
「3Dモデルを表示する」
で、以下のコードを実装しました。
(1秒約60フレームのシングルスレッドループの中で実行しています)
(カメラの位置はモデルの位置変数のzに+1000した値、カメラの注視点はモデルの位置 に毎フレーム最初に設定関数を実行しています)
/////////////////////////////////////////////
//MH : モデルハンドルを格納する変数
//x,y,z : モデルの位置の変数
//phi : x軸回転値(ラジアン)
//theta : y軸回転値(ラジアン)
//div : z軸回転値(ラジアン)
//位置をセット
DX.MV1SetPosition(MH, DX.VGet(x, y, z));
//傾きをセット
DX.MV1SetRotationMatrix(MH, DX.MMult(DX.MMult(DX.MGetRotY(theta), DX.MGetRotX(phi)), DX.MGetRotZ(div)));
//描画
DX.MV1DrawModel(MH);
/////////////////////////////////////////////
このコードをビルドし、デバッグ開始すると、指定した位置に、指定した通りの傾きで表示でき、安心していました。
しかしVSのデバッグではなく、直接exeを起動すると(非デバッグ環境)、
{x, y, z} で指定した位置にモデルが表示されず、3D空間{0, 0, 0}の位置に表示されてしまいました。
モデルの傾きは正常です。
通常起動時でもデバッグ時と同じように正しく動作させたいのですが、なぜか上手く動作しません。
しばらく原因究明の努力、調査をしたのですが、自分1人ではどうにもならず、ここに書き込むに至りました。
どうかお力添えをよろしくお願いいたします。
この時、MV1SetRotationMatrix関数をコメントアウトして実行しなかった場合は、
デバッグ時と非デバッグ時の動作の違いはなく、{x, y, z}の位置にモデルが正しく表示されました。
(もちろんモデルの傾きはありません)
また、試しにMV1SetRotationXYZ関数を用いて回転を行なった場合も、
デバッグ時と非デバッグ時の動作の違いはなく、モデルの位置のセット、回転値のセットが正しく行われました。
(しかしMV1SetRotationXYZ関数では、モデルの回転順番が異なるので、自分の表示させたい傾きにはなりません)
これらの事からMV1SetRotationMatrix関数の使用法が原因ではないかと推測したのですが、解決策が全く見当たりません。
何が原因なのでしょうか。処理が間違っているか、何か設定しなければならない項目があるのでしょうか。
書き足らない情報があれば申し訳ありません。
皆様よろしくお願いいたします。