トップページ > 過去ログ > 記事閲覧
MV1GetFrameLocalMatrixが機能しない
名前:kon 日時: 2013/02/23 14:58

MV1GetFrameLocalMatrix の戻り値が、XYZ全て0.0になってしまいます。 大分前の更新の時に MV1GetFrameLocalMatrix を使っていたモデルの関節がおかしくなったのですが、 後で修正しようと思い今まで放置していました。 MV1GetFrameLocalWorldMatrix の方は取得出来ています。 MV1GetFrameLocalMatrix で座標を取得するだけの簡易プログラムで試しても結果は変わらず、 モデルもXファイルとpmdのモデルで試してみましたが、どちらも駄目でした。 いつから症状が出るようになったか確認した所、Ver 3.09 から取得出来なくなったようです。 今の所これぐらいしか情報が無いのですが、よろしくお願いします。 使用環境は、以下の通りです。 windows2000 BorlandC++

Page: 1 |

Re: MV1GetFrameLocalMatrixが機能しない ( No.1 )
名前:管理人 日時:2013/02/24 17:37

MV1GetFrameLocalMatrix の戻り値は MATRIX構造体なので特に XYZ という要素は無いのですが、konさんの仰られるXYZとは 具体的には何を指されているのでしょうか? あと、以下のようなプログラムで MV1GetFrameLocalMatrix の値が 全て0になってしまっているかを確認してみましたが、全て0に なってしまうということはありませんでした #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int ModelHandle, AttachIndex ; float TotalTime, PlayTime ; ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら直ちに終了 return -1 ; } // 3Dモデルの読み込み ModelHandle = MV1LoadModel( "DxChara.x" ) ; // 描画先を裏画面に変更 SetDrawScreen( DX_SCREEN_BACK ) ; // 画面に映る位置に3Dモデルを移動 MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ; // 3Dモデルの0番目のアニメーションをアタッチする AttachIndex = MV1AttachAnim( ModelHandle, 0, -1, FALSE ) ; // アタッチしたアニメーションの総再生時間を取得する TotalTime = MV1GetAttachAnimTotalTime( ModelHandle, AttachIndex ) ; // 再生時間の初期化 PlayTime = 0.0f ; // 何かキーが押されるかウインドウが閉じられるまでループ while( ProcessMessage() == 0 && CheckHitKeyAll() == 0 ) { // 画面をクリア ClearDrawScreen() ; // 再生時間を進める PlayTime += 100.0f ; // 再生時間がアニメーションの総再生時間に達したら再生時間を0に戻す if( PlayTime >= TotalTime ) { PlayTime = 0.0f ; } // 再生時間をセットする MV1SetAttachAnimTime( ModelHandle, AttachIndex, PlayTime ) ; // 3Dモデルの描画 MV1DrawModel( ModelHandle ) ; MATRIX mat = MV1GetFrameLocalMatrix( ModelHandle, 5 ) ; DrawFormatString( 0, 16 * 0, GetColor( 255,255,255 ), "[0][0]:%f [0][1]:%f [0][2]:%f [0][3]:%f", mat.m[0][0], mat.m[0][1], mat.m[0][2], mat.m[0][3] ) ; DrawFormatString( 0, 16 * 1, GetColor( 255,255,255 ), "[1][0]:%f [1][1]:%f [1][2]:%f [1][3]:%f", mat.m[1][0], mat.m[1][1], mat.m[1][2], mat.m[1][3] ) ; DrawFormatString( 0, 16 * 2, GetColor( 255,255,255 ), "[2][0]:%f [2][1]:%f [2][2]:%f [2][3]:%f", mat.m[2][0], mat.m[2][1], mat.m[2][2], mat.m[2][3] ) ; DrawFormatString( 0, 16 * 3, GetColor( 255,255,255 ), "[3][0]:%f [3][1]:%f [3][2]:%f [3][3]:%f", mat.m[3][0], mat.m[3][1], mat.m[3][2], mat.m[3][3] ) ; // 裏画面の内容を表画面に反映 ScreenFlip() ; } // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; } よろしければ konさんの環境でも正常な結果が得られるかお試しに なってみてください ( 使用しているモデル DxChara.x はDXライブラリのパッケージの 「サンプルプログラム実行用フォルダ」の中にあります )
Re: MV1GetFrameLocalMatrixが機能しない ( No.2 )
名前:kon 日時:2013/02/24 18:56

すいません、XYZと言うか行列の位置情報を表す [ 3 ][ 0 ] 、[ 3 ][ 1 ] 、[ 3 ][ 2 ]ですね。 提示して頂いたプログラムを試した所、 [ 0 ][ 0 ] 、[ 1 ][ 1 ] 、[ 2 ][ 2 ] 、[ 3 ][ 3 ] 以上の要素が1で、それ以外全て0でした。 以前のバージョンに戻すとやはり取得出来るようです。 環境によるものでしょうか。
Re: MV1GetFrameLocalMatrixが機能しない ( No.3 )
名前:管理人 日時:2013/02/24 20:09

> すいません、XYZと言うか行列の位置情報を表す > [ 3 ][ 0 ] 、[ 3 ][ 1 ] 、[ 3 ][ 2 ]ですね。 なるほど 試してみましたが、私の手元では 3.09 以前と現在とで MV1GetFrameLocalMatrix で 取得できる値に違いは確認できませんでした よろしければ実際に取得できる値が異なることを確認できる モデルファイルとフレーム番号などを教えて頂けないでしょうか?
Re: MV1GetFrameLocalMatrixが機能しない ( No.4 )
名前:kon 日時:2013/02/24 22:47

いくつかのモデルで試してみたのですが、全て同じ結果で DXライブラリのサンプルに入っている DxChara.x でも同様の症状でした。 参考にならないかもしれないですし、ちょっと前なので定かではありませんが、 確かこのあたりの修正からだったかもしれません。 ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=2746
Re: MV1GetFrameLocalMatrixが機能しない ( No.5 )
名前:管理人 日時:2013/02/24 23:37

もし載せて頂いたスレッドの変更が原因だとしますと、 この変更以前の処理がバグありで、この変更以後の処理が正常な処理となります konさんは具体的に MV1GetFrameLocalMatrix でどのような値を取得したいのでしょうか? そして、konさんの意図として MV1GetFrameLocalMatrix はどうあるべきであるのに、 現在はどのようになってしまっているとお考えなのでしょうか?
Re: MV1GetFrameLocalMatrixが機能しない ( No.6 )
名前:管理人 日時:2013/02/24 23:47

追記です No.1 で私が書き込んだプログラムは実行して頂けましたでしょうか? もしNo.1 のプログラムで画面に表示される行列の要素が[0][0],[1][1],[2][2],[3][3] が 1 で、 それ以外が 0 になってしまっていたとしたら、私の予想外の結果です もしその場合、最新バージョンでは修正されているかもしれませんので、 その際はこちらのバージョンをお試しになってみてください m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_DevCppTest.exe // Dev-C++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用 http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
Re: MV1GetFrameLocalMatrixが機能しない ( No.7 )
名前:kon 日時:2013/02/25 00:24

> No.1 で私が書き込んだプログラムは実行して頂けましたでしょうか? > もしNo.1 のプログラムで画面に表示される行列の要素が[0][0],[1][1],[2][2],[3][3] が 1 で、 > それ以外が 0 になってしまっていたとしたら、私の予想外の結果です はい、提示して頂いたプログラムで DxChara.x を使用した結果がその値になります。 最新バージョンでも駄目なようです。 やりたい事は以下のスレッドの No.3 で管理人さんが説明している フレームの位置を変更せずに回転させる処理です。 ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=2687 このスレッドのプログラムのままやってみても、 Ver 3.09 以降のバージョンだと何故か自分の環境では、 位置情報が適用されずにモデルのフレームがずれて表示されてしまいます。
Re: MV1GetFrameLocalMatrixが機能しない ( No.8 )
名前:管理人 日時:2013/02/25 01:16

お試しいただきありがとうございます ふと思いついてkonさんがお使いの環境のBorlandC++でコンパイルしたら、 私の環境でもkonさんが仰られている現象と同様の結果がえられました 少し調べてみたのですが原因は分かりませんでした じっくり調べる必要がありそうですので、修正は次の週末になりそうです 申し訳ありませんがお待ちください m(_ _;m
Re: MV1GetFrameLocalMatrixが機能しない ( No.9 )
名前:kon 日時:2013/02/25 10:05

ありがとうございます。 お時間のある時で結構ですので、 よろしくお願いします。
Re: MV1GetFrameLocalMatrixが機能しない ( No.10 )
名前:管理人 日時:2013/03/03 21:37

お待たせしました 不具合の原因はBorlandC++の最適化のバグでした ( 最適化をONにすると FrameIndex の値が異様に大きい値になる ) とりあえず MV1GetFrameLocalMatrix の最初に何の処理もしない void Function( void ){} ↑のような関数を呼ぶようにすることで正常に動作するようになりました 少し釈然としませんが、この変更を加えたバージョンをアップしましたので、 よろしければお試しになってみてください m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 (中身を既存のライブラリのファイルに上書きして『再構築』をして下さい)
Re: MV1GetFrameLocalMatrixが機能しない ( No.11 )
名前:kon(解決) 日時:2013/03/05 00:39

修正された事を確認しました。 これで MV1GetFrameLocalMatrix を使った処理が組めます。 ありがとうございました。

Page: 1 |