ページ 11

MMDのアニメーションを読み込んだら不具合が起きました。

Posted: 2013年4月08日(月) 20:53
by HI魔神
この間トピックを立てた時の問題は解決しました。どうやらプロジェクトを作るところから根本的に間違っていたようです。お騒がせしました。
さて、今度はまた別の問題が発生いたしました。モデルはきちんと読み込めました。時間を1つ指定した所これもうまくいきました。
そしていざアニメーションと思いプログラムを書いたところキャラクターの見た目に異常が発生しました。
プロジェクトのダウンロードURLを張っておきますのでよろしくお願いします。
http://dl.dropbox.com/u/98581477/3D.zip

Re: MMDのアニメーションを読み込んだら不具合が起きました。

Posted: 2013年4月08日(月) 23:31
by softya(ソフト屋)
プログラムをダウンロードする前に確認です。
DxlibModelViewerでは正常な表示でしょうか?

Re: MMDのアニメーションを読み込んだら不具合が起きました。

Posted: 2013年4月09日(火) 22:13
by HI魔神
はい。問題なく表示されています。

Re: MMDのアニメーションを読み込んだら不具合が起きました。

Posted: 2013年4月09日(火) 23:47
by softya(ソフト屋)
すいません。ダウンロードが長かったので調べるのを忘れてました。これからみてみます。
Debugフォルダなど不要なものを破棄してもらえるとダウンロードも短くなると思います。試しに削ってみたら3MBほどになりました。

ちょっと見たらLog.txtに大量にモデル関係でメモリリークの記録があるのでなにかまずい事をしているのは確かです。

Re: MMDのアニメーションを読み込んだら不具合が起きました。

Posted: 2013年4月10日(水) 07:47
by HI魔神
そうなんですか・・・。必要なものしか入ってないと思ってました。
よければついでに必要なファイルがどれなのか教えてください。
私は16進数読めないもので何が悪いのか全く分かりません。

Re: MMDのアニメーションを読み込んだら不具合が起きました。

Posted: 2013年4月10日(水) 10:57
by softya(ソフト屋)
今後、16進数は読めないと多分マズイことになると思いますので出来たら勉強したほうが良いと思います。
不要な物は、Debug(2箇所)やipchフォルダ、拡張子sdfのファイルです。

で、動かしてみましたが問題点がわかりませんでした。
見た目が変なんですよね? 

それとメモリリークですが、MV1CollResultPolyDimTerminate()で後始末していないのが原因です。
「MV1CollCheck_Capsule」
http://homepage2.nifty.com/natupaji/DxL ... .html#R9N8
引用
( Dim へのアクセスの仕方についてはサンプルプログラムを見ていただくとわかりやすいと思います )  また、この関数は当たるポリゴンの数が不定である関係上、動的にメモリを確保していますので、 戻り値の情報が必要なくなった場合は MV1CollResultPolyDimTerminate 関数に戻り値の構造体を渡して後始末を行う必要があります

Re: MMDのアニメーションを読み込んだら不具合が起きました。

Posted: 2013年4月10日(水) 16:59
by HI魔神
ありがとうごさいます。壁と床の当たり判定の関数の最後に書き加えておきました。
不要なものもこれから削るようにしたいと思います。
見た目の異常としては、髪や手足がねじれて見えます。

Re: MMDのアニメーションを読み込んだら不具合が起きました。

Posted: 2013年4月10日(水) 18:03
by softya(ソフト屋)
確かにアタッチした時の動作が変です。
こういう場合はシンプルにモデルだけの表示をまず試してみましょう。

コード:

//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;
}
これだと問題なく表示されますね。つまり、他の部分が問題と言うことです。
デバッグというのは、こういう風にシンプルして確実に動くものに肉付けしていくことで問題を探す方法もあります。
と言うことで問題が出るまで関係有りそうなものを付け加えていってみてください。
あるいは、元コードで問題が無くなるまで機能をコメントアウトする手もあります。

Re: MMDのアニメーションを読み込んだら不具合が起きました。

Posted: 2013年4月12日(金) 20:17
by HI魔神
アニメのとこ全部消してlog.txt消してデバッグしてもう一回生成したところまた16進数書き込まれてます。
表示されているのは例外なく以上でしょうか?

Re: MMDのアニメーションを読み込んだら不具合が起きました。

Posted: 2013年4月12日(金) 20:34
by softya(ソフト屋)
HI魔神 さんが書きました:アニメのとこ全部消してlog.txt消してデバッグしてもう一回生成したところまた16進数書き込まれてます。
表示されているのは例外なく以上でしょうか?
MV1CollCheck_Capsuleのメモリリークの事ですよね?
少なくともアニメではなくコリジョン関係である事は確認してあります。
なので、メモリリークする抜けが残っていると思います。

Re: MMDのアニメーションを読み込んだら不具合が起きました。

Posted: 2013年4月13日(土) 12:33
by HI魔神
メモリリークは当たり判定いじったら消えました。ありがとうございます。
しかしやっぱりどうやってもキャラクターがねじれます。
極力単純にしたつもりですがよりねじれ具合がひどくなりました。
もう一度診ていただけないでしょうか?
https://dl.dropboxusercontent.com/u/98581477/3D.zip

Re: MMDのアニメーションを読み込んだら不具合が起きました。

Posted: 2013年4月13日(土) 12:36
by softya(ソフト屋)
私の書いたコードではねじれないのでしょうか?
何もコメントがないのですが?
それをベースにバグを再現するしか無い(私がやるにしても)と言う状況です。

Re: MMDのアニメーションを読み込んだら不具合が起きました。

Posted: 2013年4月13日(土) 13:40
by HI魔神
大変失礼しました。softyaさんが書いたコードは何の問題もなく動きます。

Re: MMDのアニメーションを読み込んだら不具合が起きました。

Posted: 2013年4月13日(土) 20:55
by HI魔神
申し訳ございません。私のミスでした。
これからはしっかりと一行一行読んでいきたいと思います。
長々とお付き合いいただき本当にありがとうございました。