MMDのアニメーションを読み込んだら不具合が起きました。
MMDのアニメーションを読み込んだら不具合が起きました。
この間トピックを立てた時の問題は解決しました。どうやらプロジェクトを作るところから根本的に間違っていたようです。お騒がせしました。
さて、今度はまた別の問題が発生いたしました。モデルはきちんと読み込めました。時間を1つ指定した所これもうまくいきました。
そしていざアニメーションと思いプログラムを書いたところキャラクターの見た目に異常が発生しました。
プロジェクトのダウンロードURLを張っておきますのでよろしくお願いします。
http://dl.dropbox.com/u/98581477/3D.zip
さて、今度はまた別の問題が発生いたしました。モデルはきちんと読み込めました。時間を1つ指定した所これもうまくいきました。
そしていざアニメーションと思いプログラムを書いたところキャラクターの見た目に異常が発生しました。
プロジェクトのダウンロードURLを張っておきますのでよろしくお願いします。
http://dl.dropbox.com/u/98581477/3D.zip
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: MMDのアニメーションを読み込んだら不具合が起きました。
プログラムをダウンロードする前に確認です。
DxlibModelViewerでは正常な表示でしょうか?
DxlibModelViewerでは正常な表示でしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: MMDのアニメーションを読み込んだら不具合が起きました。
すいません。ダウンロードが長かったので調べるのを忘れてました。これからみてみます。
Debugフォルダなど不要なものを破棄してもらえるとダウンロードも短くなると思います。試しに削ってみたら3MBほどになりました。
ちょっと見たらLog.txtに大量にモデル関係でメモリリークの記録があるのでなにかまずい事をしているのは確かです。
Debugフォルダなど不要なものを破棄してもらえるとダウンロードも短くなると思います。試しに削ってみたら3MBほどになりました。
ちょっと見たらLog.txtに大量にモデル関係でメモリリークの記録があるのでなにかまずい事をしているのは確かです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: MMDのアニメーションを読み込んだら不具合が起きました。
そうなんですか・・・。必要なものしか入ってないと思ってました。
よければついでに必要なファイルがどれなのか教えてください。
私は16進数読めないもので何が悪いのか全く分かりません。
よければついでに必要なファイルがどれなのか教えてください。
私は16進数読めないもので何が悪いのか全く分かりません。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: MMDのアニメーションを読み込んだら不具合が起きました。
今後、16進数は読めないと多分マズイことになると思いますので出来たら勉強したほうが良いと思います。
不要な物は、Debug(2箇所)やipchフォルダ、拡張子sdfのファイルです。
で、動かしてみましたが問題点がわかりませんでした。
見た目が変なんですよね?
それとメモリリークですが、MV1CollResultPolyDimTerminate()で後始末していないのが原因です。
「MV1CollCheck_Capsule」
http://homepage2.nifty.com/natupaji/DxL ... .html#R9N8
引用
( Dim へのアクセスの仕方についてはサンプルプログラムを見ていただくとわかりやすいと思います ) また、この関数は当たるポリゴンの数が不定である関係上、動的にメモリを確保していますので、 戻り値の情報が必要なくなった場合は MV1CollResultPolyDimTerminate 関数に戻り値の構造体を渡して後始末を行う必要があります
不要な物は、Debug(2箇所)やipchフォルダ、拡張子sdfのファイルです。
で、動かしてみましたが問題点がわかりませんでした。
見た目が変なんですよね?
それとメモリリークですが、MV1CollResultPolyDimTerminate()で後始末していないのが原因です。
「MV1CollCheck_Capsule」
http://homepage2.nifty.com/natupaji/DxL ... .html#R9N8
引用
( Dim へのアクセスの仕方についてはサンプルプログラムを見ていただくとわかりやすいと思います ) また、この関数は当たるポリゴンの数が不定である関係上、動的にメモリを確保していますので、 戻り値の情報が必要なくなった場合は MV1CollResultPolyDimTerminate 関数に戻り値の構造体を渡して後始末を行う必要があります
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: MMDのアニメーションを読み込んだら不具合が起きました。
ありがとうごさいます。壁と床の当たり判定の関数の最後に書き加えておきました。
不要なものもこれから削るようにしたいと思います。
見た目の異常としては、髪や手足がねじれて見えます。
不要なものもこれから削るようにしたいと思います。
見た目の異常としては、髪や手足がねじれて見えます。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: MMDのアニメーションを読み込んだら不具合が起きました。
確かにアタッチした時の動作が変です。
こういう場合はシンプルにモデルだけの表示をまず試してみましょう。
これだと問題なく表示されますね。つまり、他の部分が問題と言うことです。
デバッグというのは、こういう風にシンプルして確実に動くものに肉付けしていくことで問題を探す方法もあります。
と言うことで問題が出るまで関係有りそうなものを付け加えていってみてください。
あるいは、元コードで問題が無くなるまで機能をコメントアウトする手もあります。
こういう場合はシンプルにモデルだけの表示をまず試してみましょう。
//main.h
#include "DxLib.h"
//main.cpp
int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int ) {
int ModelHandle, AttachIndex ;
float TotalTime, PlayTime ;
VECTOR CameraPos ;
ChangeWindowMode( TRUE ), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK );
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "Model/初音ミク.pmd" ) ;
// 画面に映る位置に3Dモデルを移動
// MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ;
// 3Dモデルのアニメーションをアタッチする
AttachIndex = MV1AttachAnim( ModelHandle, 1, -1, FALSE ) ;
// アタッチしたアニメーションの総再生時間を取得する
TotalTime = MV1GetAttachAnimTotalTime( ModelHandle, AttachIndex ) ;
// 再生時間の初期化
PlayTime = 0.0f ;
// カメラの座標を初期化
CameraPos.x = 0.0f ;
CameraPos.y = 0.0f ;
CameraPos.z = -30.0f ;
// カメラの 手前クリップ距離と 奥クリップ距離を設定する
SetCameraNearFar( 1.0f, 150.0f ) ;
while( ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 ) { // 方向キーでカメラの座標を移動
if( CheckHitKey( KEY_INPUT_UP ) == 1 )
{
CameraPos.y += 0.5f ;
}
if( CheckHitKey( KEY_INPUT_DOWN ) == 1 )
{
CameraPos.y -= 0.5f ;
}
if( CheckHitKey( KEY_INPUT_LEFT ) == 1 )
{
CameraPos.x -= 0.5f ;
}
if( CheckHitKey( KEY_INPUT_RIGHT ) == 1 )
{
CameraPos.x += 0.5f ;
}
// カメラの位置と注視点をセット、注視点は原点
SetCameraPositionAndTarget_UpVecY( CameraPos, VGet( 0.0f, 0.0f, 0.0f ) ) ;
// 再生時間を進める
PlayTime += 0.5f ;
// 再生時間がアニメーションの総再生時間に達したら再生時間を0に戻す
if( PlayTime >= TotalTime )
{
PlayTime = 0.0f ;
}
// 再生時間をセットする
MV1SetAttachAnimTime( ModelHandle, AttachIndex, PlayTime ) ;
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
}
DxLib_End();
return 0;
}
デバッグというのは、こういう風にシンプルして確実に動くものに肉付けしていくことで問題を探す方法もあります。
と言うことで問題が出るまで関係有りそうなものを付け加えていってみてください。
あるいは、元コードで問題が無くなるまで機能をコメントアウトする手もあります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: MMDのアニメーションを読み込んだら不具合が起きました。
アニメのとこ全部消してlog.txt消してデバッグしてもう一回生成したところまた16進数書き込まれてます。
表示されているのは例外なく以上でしょうか?
表示されているのは例外なく以上でしょうか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: MMDのアニメーションを読み込んだら不具合が起きました。
MV1CollCheck_Capsuleのメモリリークの事ですよね?HI魔神 さんが書きました:アニメのとこ全部消してlog.txt消してデバッグしてもう一回生成したところまた16進数書き込まれてます。
表示されているのは例外なく以上でしょうか?
少なくともアニメではなくコリジョン関係である事は確認してあります。
なので、メモリリークする抜けが残っていると思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: MMDのアニメーションを読み込んだら不具合が起きました。
メモリリークは当たり判定いじったら消えました。ありがとうございます。
しかしやっぱりどうやってもキャラクターがねじれます。
極力単純にしたつもりですがよりねじれ具合がひどくなりました。
もう一度診ていただけないでしょうか?
https://dl.dropboxusercontent.com/u/98581477/3D.zip
しかしやっぱりどうやってもキャラクターがねじれます。
極力単純にしたつもりですがよりねじれ具合がひどくなりました。
もう一度診ていただけないでしょうか?
https://dl.dropboxusercontent.com/u/98581477/3D.zip
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: MMDのアニメーションを読み込んだら不具合が起きました。
私の書いたコードではねじれないのでしょうか?
何もコメントがないのですが?
それをベースにバグを再現するしか無い(私がやるにしても)と言う状況です。
何もコメントがないのですが?
それをベースにバグを再現するしか無い(私がやるにしても)と言う状況です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: MMDのアニメーションを読み込んだら不具合が起きました。
大変失礼しました。softyaさんが書いたコードは何の問題もなく動きます。
Re: MMDのアニメーションを読み込んだら不具合が起きました。
申し訳ございません。私のミスでした。
これからはしっかりと一行一行読んでいきたいと思います。
長々とお付き合いいただき本当にありがとうございました。
これからはしっかりと一行一行読んでいきたいと思います。
長々とお付き合いいただき本当にありがとうございました。