トップページ > 過去ログ > 記事閲覧
VC#版 VSでのデバッグ時と非デバッグ時の挙動の相違
名前:Kouya 日時: 2010/11/02 21:19

はじめまして お世話になります 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関数の使用法が原因ではないかと推測したのですが、解決策が全く見当たりません。 何が原因なのでしょうか。処理が間違っているか、何か設定しなければならない項目があるのでしょうか。 書き足らない情報があれば申し訳ありません。 皆様よろしくお願いいたします。

Page: 1 |

Re: VC#版 VSでのデバッグ時と非デバッグ時の挙動の相違 ( No.1 )
名前:いっち 日時:2010/11/05 21:10

私も少し試して見ましたが、MV1SetRotationMatrix のバグではないかと思います(もしくは、用途を間違えているか)。 管理人さんの見解をお待ちするのが宜しいかと思います。 (ソースをちょろっと見た感じだと MV1SetupMatrix 内での RotateMat変数の初期化が怪しい感じでしたが・・・) ※追記 検証してみました。 MV1SetupMatrix関数(DxModel.cpp)内の以下の行で RotateMat変数に未初期化の部分が残る事が原因のようでした。 > case MV1_ROTATE_TYPE_MATRIX : > _MEMCPY( &RotateMat, &Model->Rotation.Mat, sizeof( MATRIX_4X4CT ) ) ; > break ;
Re: VC#版 VSでのデバッグ時と非デバッグ時の挙動の相違 ( No.2 )
名前:管理人 日時:2010/11/07 23:24

ご報告ありがとうございます いっちさんのご指摘の箇所が原因でした( MATRIX_4X4C型を MATRIX型として扱ってしまっていた ) 修正版をアップしましたので、よろしければお試し下さい m(_ _;m http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip > いっちさん 調べていただきありがとうございます お陰で直ぐに修正することが出来ました m(_ _)m
Re: VC#版 VSでのデバッグ時と非デバッグ時の挙動の相違 ( No.3 )
名前:Kouya 日時:2010/11/12 20:45

ありがとうございます。 修正版を適用したところ、問題は解決しました。 皆様ありがとうございました。

Page: 1 |