ページ 1 / 1
アタッチした3Dモデルが動かない。
Posted: 2014年5月03日(土) 01:58
by DELTA-Ⅲ
初めまして、DELTA-Ⅲと申します。
製作で解決できないので投稿させてもらいます。
3Dデータを表示してアタッチまでは行きましたが、
3Dデータのアニメーションが再生されません。
どうすればいいでしょうか、お願いします。
コード:
//一部
MV1DrawModel(plc_model[p][pl_[1][p]]);
MV1SetScale(plc_model[p][pl_[1][p]], VGet( 8.0f, 8.0f, 8.0f ) );
MV1SetPosition(plc_model[p][pl_[1][p]],dgVGet(0,pl[p].y,pl[p].x));
if(pl_[1][p]<=2){
//モデル
MV1DrawModel(pls_model[p][pls[p]]);
MV1DrawModel(plm_model[p][plm[p]]);
MV1SetScale(pls_model[p][pls[p]],VGet(8.0f,8.0f,8.0f));
MV1SetScale(plm_model[p][plm[p]],VGet(8.0f,8.0f,8.0f));
MV1SetPosition(pls_model[p][pls[p]],dgVGet(0,pl[p].y,pl[p].x));
MV1SetPosition(plm_model[p][plm[p]],dgVGet(0,pl[p].y,pl[p].x));
//傾き
MV1SetRotationXYZ(plc_model[p][pl_[1][p]], dVGet((pl[p].xya/16),(-pl[p].xya/16)+(pl[p].ay/16),(pl[p].ax/16)));
MV1SetRotationXYZ(pls_model[p][pls[p]], dVGet((pl[p].xya/16),(-pl[p].xya/16)+(pl[p].ay/16),(pl[p].ax/16)));
MV1SetRotationXYZ(plm_model[p][plm[p]], dVGet((pl[p].xya/16),(-pl[p].xya/16)+(pl[p].ay/16),(pl[p].ax/16)));
//アニメーション
MV1SetAttachAnimTime(pls_model[p][pls[p]],pl[p].a[0],pl[p].at[0]);
MV1SetAttachAnimTime(plm_model[p][plm[p]],pl[p].a[1],pl[p].at[1]);
pl[p].at[1] += 0.2f ;
if(pl[p].at[1] >= pl[p].af[1])pl[p].at[1] = 0.0f;
}
Re: アタッチした3Dモデルが動かない。
Posted: 2014年5月03日(土) 08:47
by softya(ソフト屋)
もっと単純なテストコードでの再生は出来ていますでしょうか?
Re: アタッチした3Dモデルが動かない。
Posted: 2014年5月04日(日) 14:19
by DELTA-Ⅲ
softya(ソフト屋) さんが書きました:もっと単純なテストコードでの再生は出来ていますでしょうか?
ここのページを実行しても動きませんでした。
また、Lat式ミクも動きません。
Re: アタッチした3Dモデルが動かない。
Posted: 2014年5月04日(日) 14:36
by softya(ソフト屋)
MMDを完全に再現出来ているわけではないので、動かない場合も有り得ます。
付属ツールのDxLibModelViewerで、まず動作を確認してみてください。
あとDXライブラリのバージョンによりバグっている可能性もありますので最新を使ってみてください。
最新でもダメなら、DXライブラリの管理人さんに相談してみるのも手です。
Re: アタッチした3Dモデルが動かない。
Posted: 2014年5月04日(日) 20:20
by DELTA-Ⅲ
これを打った者です。
softya(ソフト屋)さん、すみません。今度から気を付けます。
何かおかしいと思うので、プログラムをして画面を見せてくれますか?
コード:
#include <DxLib.h>
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK );
int AttachIndex ;
float TotalTime, PlayTime ;
// 3Dモデルの読み込み
int ModelHandle = MV1LoadModel( "dat/Lat式ミク/Lat式ミクVer2.3_Normal.pmd" ) ;
//奥行0.1~1000までをカメラの描画範囲とする
SetCameraNearFar( 0.1f, 1000.0f ) ;
//(0,10,-20)の視点から(0,10,0)のターゲットを見る角度にカメラを設置
SetCameraPositionAndTarget_UpVecY( VGet( -20, 10, -20 ), VGet( 0.0f, 10.0f, 0.0f ) ) ;
// 3Dモデルの1番目のアニメーションをアタッチする
AttachIndex = MV1AttachAnim( ModelHandle, 1, -1, FALSE ) ;
// アタッチしたアニメーションの総再生時間を取得する
TotalTime = MV1GetAttachAnimTotalTime( ModelHandle, AttachIndex ) ;
// 再生時間の初期化
PlayTime = 0.0f ;
// 何かキーが押されるかウインドウが閉じられるまでループ
while( !ScreenFlip() && !ProcessMessage() && !ClearDrawScreen() ){
SetCameraNearFar(0.1f,2700.0f);
SetupCamera_Ortho(20);
MV1DrawModel( ModelHandle ) ;
//MV1SetScale(ModelHandle,VGet(12.0f,12.0f,12.0f));
MV1SetPosition(ModelHandle,VGet(0,-15,0));
MV1SetAttachAnimTime(ModelHandle,AttachIndex,PlayTime);
PlayTime += 0.2f ;
if(PlayTime >= TotalTime)PlayTime = 0.0f;
SetCameraPositionAndTarget_UpVecY( VGet(-48,0,-54), VGet(0,0,0));
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
書き忘れてしまいましたが使用している物はwin7、VisalC++2010、DXライブラリ VisualC++用(Ver3.11f)です。
表示状態
[thumbnail]
http://delta27.sitemix.jp/picture/C++.png[/thumbnail]
Re: アタッチした3Dモデルが動かない。
Posted: 2014年5月04日(日) 20:30
by softya(ソフト屋)
DxLibModelViewerでは正常に表示されますか? 情報が欠落すると解決が遅れることに成ります。
Log.txtも貼られたほうが良いでしょう(あちらに)。
それと相互リンクをお願いします。
ここ → DXライブラリ置き場掲示板
のリンクがありません。
ちなみに、私のPCで実行するとこんな感じです。
問題解析にLog.txtは重要な情報となりそうです。
Re: アタッチした3Dモデルが動かない。
Posted: 2014年5月05日(月) 11:14
by DELTA-Ⅲ
softya(ソフト屋) さんが書きました:DxLibModelViewerでは正常に表示されますか? 情報が欠落すると解決が遅れることに成ります。
Log.txtも貼られたほうが良いでしょう(あちらに)。
それと相互リンクをお願いします。
ここ → DXライブラリ置き場掲示板
のリンクがありません。
>>softya(ソフト屋)さん
すみません、今度こそ気を付けます。
DxLibModelViewerでは正常に動作をしていました。
コードはDXライブラリ質問掲示板の方で置かせてもらいます。
http://hpcgi2.nifty.com/natupaji/bbs/pa ... ew&no=3295
あと、少々放置をさせてもらいます。
色々迷惑をかけてすみません。
Re: アタッチした3Dモデルが動かない。
Posted: 2014年5月05日(月) 11:17
by softya(ソフト屋)
あちらにあるLog.txtを見るとDXライブラリ Ver3.05で動作している様に見えます。
DXライブラリ VisualC++用(Ver3.11f)では無い様です。
Re: アタッチした3Dモデルが動かない。
Posted: 2014年5月05日(月) 12:23
by DELTA-Ⅲ
softya(ソフト屋) さんが書きました:あちらにあるLog.txtを見るとDXライブラリ Ver3.05で動作している様に見えます。
DXライブラリ VisualC++用(Ver3.11f)では無い様です。
ゲームの方はVer3.11fで制作していますが、
http://dixq.net/g/でダウンロードしたファイルで実行していますが、
両方同じ結果になっています。
Re: アタッチした3Dモデルが動かない。
Posted: 2014年5月05日(月) 13:06
by softya(ソフト屋)
DELTA-Ⅲ さんが書きました:softya(ソフト屋) さんが書きました:あちらにあるLog.txtを見るとDXライブラリ Ver3.05で動作している様に見えます。
DXライブラリ VisualC++用(Ver3.11f)では無い様です。
ゲームの方はVer3.11fで制作していますが、
http://dixq.net/g/でダウンロードしたファイルで実行していますが、
両方同じ結果になっています。
Log.txtなど客観的なチェックをお願いします。
出来るだけ主観を交えず客観的に物事を見ることが解決のための早道です。
※ 人は間違いますし、思い込みで勘違いします。
DxLibModelViewerで正常に見れるならなにか違いが有るはずです。
Re: アタッチした3Dモデルが動かない。
Posted: 2014年5月06日(火) 00:46
by DELTA-Ⅲ
把握はしましたが、
さっきのデバックでは動いていました。しかしメインの方では動いていませんでした。
とりあえずメインの方を見てくれますか?Releaseのみです。
http://kie.nu/1Ti1
見えづらいですがガトリングガンが回転するようにしています。(多分ゆっくり回っておる。)
これで最後にします。
Re: アタッチした3Dモデルが動かない。
Posted: 2014年5月06日(火) 09:50
by softya(ソフト屋)
STGの様ですが、とりあえず起動します。
問題点を教えてくれないと何を確認してよいか分からないです。
Re: アタッチした3Dモデルが動かない。
Posted: 2014年5月06日(火) 22:45
by DELTA-Ⅲ
softya(ソフト屋) さんが書きました:STGの様ですが、とりあえず起動します。
問題点を教えてくれないと何を確認してよいか分からないです。
忘れていました。すみません。
今の問題はガドリングが回転しない。
のみです。
また、付属の.exeも起動して下さい。
プロジェクト自体に問題が有るのかと思いまして
Re: アタッチした3Dモデルが動かない。
Posted: 2014年5月06日(火) 23:46
by softya(ソフト屋)
「DXライブラリ置き場 3D関係関数リファレンスページ」
http://homepage2.nifty.com/natupaji/DxL ... .html#R1N1
ここに有るとおりモーションのファイル名にルールが有りますが、ガトリングガンはルールから外れているようです。
そこを直しても動かないのですが、プログラム自体の問題は2010がうまく動かない状況のため確認できておりません。
ビューアでは自動的に読み込まれてアニメが動くことは確認しました。
時間があったら自分でコードを書いてみますが、明日までお待ちください。
Re: アタッチした3Dモデルが動かない。
Posted: 2014年6月30日(月) 21:47
by DELTA-Ⅲ
突然のコメントですみません。DELTA-Ⅲです。
ユーザーを登録しました。お世話になると思いますのでよろしくお願いします。
softya(ソフト屋) さん、コードはどうでしょうか?
まだ原因が分からないのでお願いします。
Re: アタッチした3Dモデルが動かない。
Posted: 2014年6月30日(月) 22:11
by softya(ソフト屋)
すいません。忙しくて忘れておりました。
データも行方不明です。
申し訳ないですがガトリングガンがちゃんと動かない事のテストプログラム(それだけに特化した物)とガトリングガンデータだけ、ここの添付機能で添付してもらえますか。
アップローダだと消えてしまいますので。
Re: アタッチした3Dモデルが動かない。
Posted: 2014年7月01日(火) 22:14
by DELTA-Ⅲ
softya(ソフト屋) さんが書きました:すいません。忙しくて忘れておりました。
データも行方不明です。
申し訳ないですがガトリングガンがちゃんと動かない事のテストプログラム(それだけに特化した物)とガトリングガンデータだけ、ここの添付機能で添付してもらえますか。
アップローダだと消えてしまいますので。
テストプログラムが上手く作れなかったので、自分なりにテストプログラムぐらい簡略化した物を用意します。
しかし「ファイル添付」でファイル選択した後、ファイルの追加を押しても添付ができないです。どうすれいいですか?
申し訳ありません。
Re: アタッチした3Dモデルが動かない。
Posted: 2014年7月01日(火) 23:50
by softya(ソフト屋)
zipにすれば添付できるはずです。
Re: アタッチした3Dモデルが動かない。
Posted: 2014年7月02日(水) 05:28
by へにっくす
softya(ソフト屋) さんが書きました:zipにすれば添付できるはずです。
ただし8MB以内のようですね(下の画像のように投稿時のファイル添付タグでzipにマウスをあてると許可サイズがツールチップで出ます)。

- 許可サイズがみれる。
- 20140702_dixq_t15014_image_01.png (63.35 KiB) 閲覧数: 11387 回
ふつうソースだけなら、そこまで行くことはないはずですが。
Re: アタッチした3Dモデルが動かない。
Posted: 2014年7月02日(水) 16:24
by DELTA-Ⅲ
>>へにっくすさん、
気がつきませんでした、すみません。
コードは容量オーバーは無かったのですが、他のデータでオーバーをしていた様なので
それを落としてzipにしました。
コードというよりプロジェクトですが見てください。
ガトリングガンが動いていません。
Re: アタッチした3Dモデルが動かない。
Posted: 2014年7月02日(水) 21:42
by softya(ソフト屋)
結論から言えば、ほとんどのアニメ関数で引数が間違っています。
まぁ、配列の添字がすごくてバグらずに書く自信は私にもないですが、もっと書き方を考えないとバグが取れる方が不思議です。
で答えを書いても良いのですが、ご自身でまずリファレンスの確認とデバッガで各アニメ系関数の戻り値の確認をしてもらったほうが勉強になりそうです。
Re: アタッチした3Dモデルが動かない。
Posted: 2014年7月03日(木) 18:57
by DELTA-Ⅲ
>>softya(ソフト屋) さん、
一部のコードが間違っていました。
そのコードの修正したものを上げますので見てください。
► スポイラーを表示
main.cpp
コード:
#define GLOBAL_INSTANCE
#include "GV.h"
int ProcessLoop(){
if(ProcessMessage()!=0)return -1;//プロセス処理がエラーなら-1を返す
if(ClearDrawScreen()!=0)return -1;//画面クリア処理がエラーなら-1を返す
return 0;
}
void fps_wait();
void main_graph();
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
for(int a=0;a<1;a++){for(int b=0;b<1;b++){for(int c=0;c<1;c++){gm[a][b][c]=0;}}}
while(ProcessLoop()==0){
//メインループ
if(gm[0][0][0]==0){
pl[0].x = WX/2;
pl[0].y = WY/2;
plm_model[0][0] = MV1LoadModel("dat/mdl/pl/mg.pmx");
pl[0].a[1] = MV1AttachAnim(plm_model[0][0], 1, -1, FALSE ) ;
pl[0].af[1] = MV1GetAttachAnimTotalTime(plm_model[0][0],1);
gm[0][0][0]=3,gm[0][0][1]=0;
}if(gm[0][0][0]==1){
}if(gm[0][0][0]==2){
}if(gm[0][0][0]==3){
if(gm[0][0][1]==0){
main_graph();
time[0]++;
}
}
fps_wait();ScreenFlip();//裏画面反映
if(main_lc==1)break;//エスケープが入力されたらブレイク
}//特に意味なし
DxLib_End();return 0;}
graph.cpp
コード:
#include "GV.h"
//プレイヤー
void gp_pl(int p){double siz = 10.0f;
//モデル
MV1DrawModel(plm_model[p][0]);
MV1SetScale(plm_model[p][0],VGet(siz,siz,siz));
MV1SetPosition(plm_model[p][0],VGet(0,0,0));
//アニメーション
MV1SetAttachAnimTime(plm_model[p][0],pl[p].a[1],pl[p].at[1]);
pl[0].at[1] += 0.1f;
if(pl[0].at[1] >= pl[0].af[1])pl[0].at[1] = 0.0f;
}
//画面全体
void main_graph(){
SetCameraNearFar(0.1f,2700.0f);
SetupCamera_Ortho((float)WY);
gp_pl(0);
//
SetCameraPositionAndTarget_UpVecY( VGet(-48,0,0), VGet(0,0,0));
//
}
報告失礼しました。
Re: アタッチした3Dモデルが動かない。
Posted: 2014年7月03日(木) 20:32
by softya(ソフト屋)
まだ、間違っているので再確認を。
戻り値って本当に確認されてますか?
Re: アタッチした3Dモデルが動かない。
Posted: 2014年7月03日(木) 21:11
by DELTA-Ⅲ
softya(ソフト屋) さんが書きました:まだ、間違っているので再確認を。
戻り値って本当に確認されてますか?
すみませんでした。確認をし忘れていました。
しかし、お手上げの状態です。
リファレンスを見ても戻り値を確認をしても
戻り値が-1では無と思っていますがガトリングガンが回りません。
今の状態
plm_model[0][0] = MV1LoadModel("dat/mdl/pl/mg.pmx");
pl[0].a[1] = MV1AttachAnim(plm_model[0][0], 0, -1, FALSE);
pl[0].af[1] = MV1GetAttachAnimTotalTime(plm_model[0][0],pl[0].a[1]);
Re: アタッチした3Dモデルが動かない。
Posted: 2014年7月03日(木) 21:18
by softya(ソフト屋)
それで回りませんか? 私の所ではゆっくり回転してます。pl[0].af[1]などの値も正常ですよね?
それと pl[0]だったり、pl[p]だったり混在します。ご本人が間違いやすいプログラムの構造は再検討したほうが良いでしょう。
Re: アタッチした3Dモデルが動かない。
Posted: 2014年7月04日(金) 00:14
by DELTA-Ⅲ
すみません、最新の3.12aにしたら、ちゃんと動くようになりました。
しかし、メインではアタッチの変数が0x0b1de778と言うのが入っているらしく、きちんと動作しません。
コード:
plsa[p][0] = MV1AttachAnim(pls_model[p][pls[p]],0, -1, FALSE );
pl[p].af[0] = MV1GetAttachAnimTotalTime(pls_model[p][pls[p]],plsa[p][0]);
plsa[p][1] = MV1AttachAnim(plm_model[p][plm[p]],0, -1, FALSE );
pl[p].af[1] = MV1GetAttachAnimTotalTime(pls_model[p][pls[p]],plsa[p][1]);
もし足りなければ教えてください。
Re: アタッチした3Dモデルが動かない。
Posted: 2014年7月04日(金) 00:20
by softya(ソフト屋)
とりあえず引数の配列の添字の関係がややこしすぎでバグらないほうが不思議って感想でしょうか。
pl[p].af[1] = MV1GetAttachAnimTotalTime(pls_model[p][pls[p]],plsa[p][1]);
って間違ってません?
こんなトコでつまずいてるよりも、もっと分かりやすくしないとバグ出すために組んでいるようなものですよ。
Re: アタッチした3Dモデルが動かない。
Posted: 2014年7月04日(金) 16:03
by DELTA-Ⅲ
>>softya(ソフト屋) さん、
単純なミスでした。すみません。
今後は混在しない様に構造を考えます。
色々、ありがとうございました。