Metasequoia BBS

| New message | Normal | Tree |
Status
Tag
Keyword
[10229] ボーンオフセット行列の作成について / たあし
Done [Talk] Response
お世話になっております。
メタセコイアのボーンデータの読み込みんで、ボーンオフセット行列を作成したいと考えています。
私の知識不足でなかなか理解が追いつかないので、質問させて頂いてよろしいでしょうか?

upVectorは角度が入っているようですが、回転順序はx-y-zでよろしいでしょうか?
forwardAxisで前方ベクトルの方向が決まっているようですが、このベクトルをupVectorの角度で回転させて、外積で横方向のベクトルを作成し、3つのベクトルで回転行列を作成すればいいのでしょうか?
2025-02-06 18:02
[10230] Re: ボーンオフセット行列の作成について / Administrator
ボーンの行列は内部計算が複雑で、一般的な処理とも異なる部分があるかもしれません。SDKからアクセスすれば計算後の行列を取得できるので細かいことは気にせずに済みますが、外部で独自に計算することを想定していません。

このあたり実装したのも随分昔で、詳細はもはや覚えておりませんので、正直なところ正確な回答をするのも難しいですが、内部コードで行列計算を行っているgetBoneOrgMat()とその周辺コードを切り出してみたので、参考にしてみてください。

void Bone::setUpVector(const MQAngle& angle)
{
    upVector = angle;
    
    if(forwardAxis != AXIS_Y_PLUS)
        upVectorMat = getForwardAxisMatrix();
    else
        upVectorMat.Identify();
    if(angle != MQAngle(0,0,0))
        upVectorMat *= angle.GetRotationMatrix();
}

MQMatrix Bone::getForwardAxisMatrix() const
{
    MQMatrix m;
    m.Identify();

Show more...
2025-02-07 16:46
[10231] Re: ボーンオフセット行列の作成について / たあし
ありがとうございます!
ある程度は処理の目星をつけていたのですが、実際のコードを見てみると、全然まとまっていなかったと感じます。
これからじっくり読んで、このコードを参考に実装してみたいと思います。
2025-02-08 20:33