Re: キャラクターの手に武器をアタッチしたい ( No.1 ) |
- 名前:管理人 日時:2015/05/10 11:41
載せていただいたコードで問題ないはずです
MV1SearchFrame は成功していますでしょうか?
もし -2 や -1 が返ってきていたら失敗しています
-1 : モデルハンドルが不正な値な場合など
-2 : 指定の名前のフレームが見つからなかった
|
Re: キャラクターの手に武器をアタッチしたい ( No.2 ) |
- 名前:north 日時:2015/05/10 14:38
コードには問題ないということで安心しました。
MV1SearchFrameも調べてみたのですが自分の指定したいフレームの番号が入っており問題ありませんでした。
プログラムをアップしたので一度見て頂いてもよろしいでしょうか?
ttp://xfs.jp/WCXr5X
パスワード:test
どうかよろしくお願い致します。
|
Re: キャラクターの手に武器をアタッチしたい ( No.3 ) |
- 名前:管理人 日時:2015/05/10 15:10
拝見しました
MV1SearchFrame や MV1GetFrameLocalWorldMatrix に渡しているモデルハンドルに問題がありました
アニメーションを流しているのはメンバー変数 model に代入されているモデルハンドルですので、
MV1SearchFrame や MV1GetFrameLocalWorldMatrix に渡すモデルハンドルを model にしたところ、
武器がアタッチされました
//武器をアタッチするフレームの番号を検索
WeponAttachFrameNum = MV1SearchFrame(tPlayerParam.PlayerModel[ModelNum],"右人指1");
//武器をアタッチするフレームのローカル→ワールド変換行列を取得する
gTestMatrix = WeponFrameMatrix = MV1GetFrameLocalWorldMatrix(tPlayerParam.PlayerModel[ModelNum], WeponAttachFrameNum);
↓
//武器をアタッチするフレームの番号を検索
WeponAttachFrameNum = MV1SearchFrame(model,"右人指1");
//武器をアタッチするフレームのローカル→ワールド変換行列を取得する
gTestMatrix = WeponFrameMatrix = MV1GetFrameLocalWorldMatrix(model, WeponAttachFrameNum);
よろしければお試しください
|
Re: キャラクターの手に武器をアタッチしたい ( No.4 ) |
- 名前:north 日時:2015/05/10 15:30
ありがとうございます。
無事にアタッチされるようになりました。
ここでもう一つ質問があるのですが扇子のモデルをDXライブラリのモデルviewerで見ると
0番のフレームがMeshになっているのですが
これを0番でなく1番のフレームにアタッチさせたい場合はどうしたらよいでしょうか?
質問ばかりで申し訳ありません。
どうかよろしくお願い致します。
|
Re: キャラクターの手に武器をアタッチしたい ( No.5 ) |
- 名前:管理人 日時:2015/05/10 15:38
> ここでもう一つ質問があるのですが扇子のモデルをDXライブラリのモデルviewerで見ると
> 0番のフレームがMeshになっているのですが
> これを0番でなく1番のフレームにアタッチさせたい場合はどうしたらよいでしょうか?
0番、1番とは扇子のモデルのことでしょうか?
すみません、仰られている意味がよく分かりません
もう少し詳しくご説明していただけますでしょうか?
|
Re: キャラクターの手に武器をアタッチしたい ( No.6 ) |
- 名前:north 日時:2015/05/10 22:48
説明不足で申し訳ありません。
0番、1番は扇子のモデルのフレームのことです。
0番がMeshという名前のフレームとなっていて今はそこにアタッチするようになっているのですが
それを1番のフレームにアタッチするようにしたいのです。
アタッチする側・・・キャラクターモデルのフレーム番号は指定してアタッチできるのですが
アタッチされる側のフレームを指定して
アタッチする側の指定されたフレームにアタッチするにはどうしたらよろしいでしょうか?
説明がうまくできなくて申し訳ありません。
どうか教えていただけたらと思います。
|
Re: キャラクターの手に武器をアタッチしたい ( No.7 ) |
- 名前:管理人 日時:2015/05/11 00:31
ご説明ありがとうございます、理解できました
例えばアタッチする側のモデルの1番のフレームをアタッチされる側のモデルの10番のフレームに
アタッチする場合は以下のようになります
VECTOR AttachSuruFrame1Position ;
MATRIX TransMat ;
MATRIX AttachSareruFrame10Mat ;
MATRIX MixMatrix ;
// アタッチするモデルの MV1SetMatrix の設定を無効化する
MV1SetMatrix( AttachSuruModelHandle, MGetIdent() ) ;
// アタッチするモデルのフレーム1番の座標を取得する
AttachSuruFrame1Position = MV1GetFramePosition( AttachSuruModelHandle, 1 ) ;
// アタッチするモデルをフレーム1番の座標を原点にするための平行移動行列を作成
TransMat = MGetTranslate( VScale( AttachSuruFrame1Position, -1.0f ) ) ;
// アタッチされるモデルのフレーム10番の行列を取得
AttachSareruFrame10Mat = MV1GetFrameLocalWorldMatrix( AttachSareruModelHandle, 10 ) ;
// アタッチするモデルをフレーム1番の座標を原点にするための平行移動行列と、
// アタッチされるモデルのフレーム10番の行列を合成
MixMatrix = MMult( TransMat, AttachSareruFrame10Mat ) ;
// 合成した行列をアタッチするモデルにセット
MV1SetMatrix( AttachSuruFrame1Position, MixMatrix ) ;
// アタッチするモデルを描画
MV1DrawModel( AttachSuruFrame1Position ) ;
上記のプログラムを northさんのプログラム用にモデルハンドルやフレーム番号の部分などを変更してみてください
|
Re: キャラクターの手に武器をアタッチしたい ( No.8 ) |
- 名前:north(解決) 日時:2015/05/11 02:32
ありがとうございます。
無事に期待通りの動きを実装することができました。
// 合成した行列をアタッチするモデルにセット
MV1SetMatrix( AttachSuruFrame1Position, MixMatrix ) ;
// アタッチするモデルを描画
MV1DrawModel( AttachSuruFrame1Position ) ;
上記のAttachSuruFrame1PositionのところはAttachSuruModelHandleの間違いでよろしいでしょうか?
細かい点ですがよろしくお願い致します。
|
Re: キャラクターの手に武器をアタッチしたい ( No.9 ) |
- 名前:管理人(解決) 日時:2015/05/11 02:52
> 上記のAttachSuruFrame1PositionのところはAttachSuruModelHandleの間違いでよろしいでしょうか?
> 細かい点ですがよろしくお願い致します。
すみません、その通りです orz
一応修正したものを・・・
VECTOR AttachSuruFrame1Position ;
MATRIX TransMat ;
MATRIX AttachSareruFrame10Mat ;
MATRIX MixMatrix ;
// アタッチするモデルの MV1SetMatrix の設定を無効化する
MV1SetMatrix( AttachSuruModelHandle, MGetIdent() ) ;
// アタッチするモデルのフレーム1番の座標を取得する
AttachSuruFrame1Position = MV1GetFramePosition( AttachSuruModelHandle, 1 ) ;
// アタッチするモデルをフレーム1番の座標を原点にするための平行移動行列を作成
TransMat = MGetTranslate( VScale( AttachSuruFrame1Position, -1.0f ) ) ;
// アタッチされるモデルのフレーム10番の行列を取得
AttachSareruFrame10Mat = MV1GetFrameLocalWorldMatrix( AttachSareruModelHandle, 10 ) ;
// アタッチするモデルをフレーム1番の座標を原点にするための平行移動行列と、
// アタッチされるモデルのフレーム10番の行列を合成
MixMatrix = MMult( TransMat, AttachSareruFrame10Mat ) ;
// 合成した行列をアタッチするモデルにセット
MV1SetMatrix( AttachSuruModelHandle, MixMatrix ) ;
// アタッチするモデルを描画
MV1DrawModel( AttachSuruModelHandle ) ;
|
Re: キャラクターの手に武器をアタッチしたい ( No.10 ) |
- 名前:north(解決) 日時:2015/05/11 05:11
わざわざありがとうございます。
お手数をおかけいたしました
|