トップページ > 記事閲覧
キャラクターの手に武器をアタッチしたい
名前:north 日時: 2015/05/10 05:22

いつも質問に答えてくださりありがとうございます。 キャラクターのモデルに武器をアタッチさせようとしているのですが、武器が原点の座標から移動せず、アタッチがうまくいかず困っています。 具体的なコードは //武器をアタッチするフレームの番号を検索 WeponAttachFrameNum = MV1SearchFrame(model[0]->ModelHandle[9],"右人指1"); //武器をアタッチするフレームのローカル→ワールド変換行列を取得する WeponFrameMatrix = MV1GetFrameLocalWorldMatrix(model[0]->ModelHandle[9], WeponAttachFrameNum); MV1SetMatrix(model[3]->WeponHandle, WeponFrameMatrix); MV1DrawModel(model[3]->WeponHandle); のようになっております。 方法としても良いものかわからずどのようにしたら手に武器がアタッチされるようになりますでしょうか? 教えていただけたらと思います。 どうかよろしくお願い致します。
メンテ

Page: 1 |

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

わざわざありがとうございます。 お手数をおかけいたしました
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存