3Dモデルの移動

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
わからんこ

3Dモデルの移動

#1

投稿記事 by わからんこ » 13年前

3dのキャラクタモデル(.pmd)に

サンプルプログラムの SetModelFramePosition を使い

void SetModelFramePosition( int ModelHandle, char *FrameName, int SetModelHandle )
{
MATRIX FrameMatrix ;
int FrameIndex ;

// フレーム名からフレーム番号を取得する
FrameIndex = MV1SearchFrame( ModelHandle, FrameName ) ;

// フレームの現在のワールドでの状態を示す行列を取得する
FrameMatrix = MV1GetFrameLocalWorldMatrix( ModelHandle, FrameIndex ) ;

// セットするモデルの状態を示す行列をフレームの状態を示す行列と同じにする
MV1SetMatrix( SetModelHandle, FrameMatrix ) ;
}

.mqo形式のアクセサリーモデルを3dのキャラクタモデルのフレームに追従させることはできました。

しかし、ボタン入力を受け、フラグがたつと、追従ではなく、モデルの座標の少し前に表示させたいのですが

うまくいきません。

ボタンを切り替えた時にいた、モデル座標にアクセサリーモデルが残ってしまい、ついてきません。

確認したところ、アクセサリーのモデルは常にモデルの少し前を示しています。

MV1SetPositionの場所も色々変えてみましたがダメでした。

SetModelFramePositionを使った後は何か処理行わないといけないのでしょうか?

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

Re: 3Dモデルの移動

#2

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

これだけだと良くわかりませんが、常にSetModelFramePositionが呼び出された状態なのではないだろうか?と思うんですがどうでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

わからんこ

Re: 3Dモデルの移動

#3

投稿記事 by わからんこ » 13年前

つねに呼び出す状態ではないのですが、

色々試しているうちに、気がついたのですが、

描画の順番で変わってくるということはあるのでしょうか?

今はフィールドとモデルを描画する前にアクセサリモデルを描画しています。

今はプログラムをいじれないので憶測なのですがどうでしょうか?

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

Re: 3Dモデルの移動

#4

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

アクセサリモデルに常にどの様なマトリクスを適用していて、どのようにMV1SetPositionで移動させていているか分からないと答えようが無いですね。
(1)適用している処理
(2)適用している順番
(3)描画のタイミング
です。

解決チェックは外しておきます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

わからんこ

Re: 3Dモデルの移動

#5

投稿記事 by わからんこ » 13年前

void Accessory_model(void){

if(flag==0){
SetModelFramePosition( mod.ModelHandle, "腰飾り先", mod.Acc_Handle );
}else{
mod.accpos=cam.pos;
mod.accpos=VAdd(mod.accpos,VGet(10.0f,PLAYER_HIT_HEIGHT,10.0f));
MV1SetPosition( mod.Acc_Handle,mod.accpos);
}

}

この関数をメインループのモデルの移動後に呼び出し、次に描写しています。

見てみたところアクセサリーの位置情報は更新されているのですが、移動が行われていない所を

見ると、MV1SetPositionがおかしい気がします。

色々変えてみたのですが、いまだにうまくいきません

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

Re: 3Dモデルの移動

#6

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

ここの注意書きにある問題ではないでしょうか?

「DXライブラリ置き場 3D関係関数リファレンスページ MV1SetMatrix」
http://homepage2.nifty.com/natupaji/DxL ... html#R3N11

引用:この関数に単位行列以外の行列を渡すと、以後 MV1SetPosition や MV1SetScale 等の関数の設定は無視され、 MV1SetMatrix 関数で設定した行列のみを使用してローカル → ワールド座標変換が行われるようになります。 ( 解除する場合は MV1SetMatrix 関数に単位行列を渡します )

注意書きにある通り単位行列を設定してみて下さい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

わからんこ

Re: 3Dモデルの移動

#7

投稿記事 by わからんこ » 13年前

その通りでした。

わかりにくい説明しか出来てないのに、

丁寧に答えてくださってありがとうございました

閉鎖

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