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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
HI魔神
記事: 30
登録日時: 12年前
住所: 福井(大都会)

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

#1

投稿記事 by HI魔神 » 12年前

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

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

#2

投稿記事 by softya(ソフト屋) » 12年前

プログラムをダウンロードする前に確認です。
DxlibModelViewerでは正常な表示でしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

HI魔神
記事: 30
登録日時: 12年前
住所: 福井(大都会)

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

#3

投稿記事 by HI魔神 » 12年前

はい。問題なく表示されています。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

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

#4

投稿記事 by softya(ソフト屋) » 12年前

すいません。ダウンロードが長かったので調べるのを忘れてました。これからみてみます。
Debugフォルダなど不要なものを破棄してもらえるとダウンロードも短くなると思います。試しに削ってみたら3MBほどになりました。

ちょっと見たらLog.txtに大量にモデル関係でメモリリークの記録があるのでなにかまずい事をしているのは確かです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

HI魔神
記事: 30
登録日時: 12年前
住所: 福井(大都会)

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

#5

投稿記事 by HI魔神 » 12年前

そうなんですか・・・。必要なものしか入ってないと思ってました。
よければついでに必要なファイルがどれなのか教えてください。
私は16進数読めないもので何が悪いのか全く分かりません。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

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

#6

投稿記事 by softya(ソフト屋) » 12年前

今後、16進数は読めないと多分マズイことになると思いますので出来たら勉強したほうが良いと思います。
不要な物は、Debug(2箇所)やipchフォルダ、拡張子sdfのファイルです。

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

それとメモリリークですが、MV1CollResultPolyDimTerminate()で後始末していないのが原因です。
「MV1CollCheck_Capsule」
http://homepage2.nifty.com/natupaji/DxL ... .html#R9N8
引用
( Dim へのアクセスの仕方についてはサンプルプログラムを見ていただくとわかりやすいと思います )  また、この関数は当たるポリゴンの数が不定である関係上、動的にメモリを確保していますので、 戻り値の情報が必要なくなった場合は MV1CollResultPolyDimTerminate 関数に戻り値の構造体を渡して後始末を行う必要があります
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

HI魔神
記事: 30
登録日時: 12年前
住所: 福井(大都会)

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

#7

投稿記事 by HI魔神 » 12年前

ありがとうごさいます。壁と床の当たり判定の関数の最後に書き加えておきました。
不要なものもこれから削るようにしたいと思います。
見た目の異常としては、髪や手足がねじれて見えます。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

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

#8

投稿記事 by softya(ソフト屋) » 12年前

確かにアタッチした時の動作が変です。
こういう場合はシンプルにモデルだけの表示をまず試してみましょう。

コード:

//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(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

HI魔神
記事: 30
登録日時: 12年前
住所: 福井(大都会)

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

#9

投稿記事 by HI魔神 » 12年前

アニメのとこ全部消してlog.txt消してデバッグしてもう一回生成したところまた16進数書き込まれてます。
表示されているのは例外なく以上でしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

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

#10

投稿記事 by softya(ソフト屋) » 12年前

HI魔神 さんが書きました:アニメのとこ全部消してlog.txt消してデバッグしてもう一回生成したところまた16進数書き込まれてます。
表示されているのは例外なく以上でしょうか?
MV1CollCheck_Capsuleのメモリリークの事ですよね?
少なくともアニメではなくコリジョン関係である事は確認してあります。
なので、メモリリークする抜けが残っていると思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

HI魔神
記事: 30
登録日時: 12年前
住所: 福井(大都会)

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

#11

投稿記事 by HI魔神 » 12年前

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

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

#12

投稿記事 by softya(ソフト屋) » 12年前

私の書いたコードではねじれないのでしょうか?
何もコメントがないのですが?
それをベースにバグを再現するしか無い(私がやるにしても)と言う状況です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

HI魔神
記事: 30
登録日時: 12年前
住所: 福井(大都会)

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

#13

投稿記事 by HI魔神 » 12年前

大変失礼しました。softyaさんが書いたコードは何の問題もなく動きます。

HI魔神
記事: 30
登録日時: 12年前
住所: 福井(大都会)

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

#14

投稿記事 by HI魔神 » 12年前

申し訳ございません。私のミスでした。
これからはしっかりと一行一行読んでいきたいと思います。
長々とお付き合いいただき本当にありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る