トップページ > 記事閲覧
MV1SetFrameUserLocalMatrix使用時のボーンScaleの扱いについて
名前:初心者 日時: 2026/03/13 12:21

こんにちは。 いつも DXライブラリ を利用させていただいております。 現在、以下のようなコードでフレームの変形を行っています。 ====================================================================================================================== public void SetFrame(int frameIndex, VECTOR bPos, VECTOR bRot, float bRotW, VECTOR bSca) { // 正規化 float len = (float)Math.Sqrt( bRot.x * bRot.x + bRot.y * bRot.y + bRot.z * bRot.z + bRotW * bRotW); float x = bRot.x / len; float y = bRot.y / len; float z = bRot.z / len; float w = bRotW / len; float x2 = x + x, y2 = y + y, z2 = z + z; float xx = x * x2, xy = x * y2, xz = x * z2; float yy = y * y2, yz = y * z2, zz = z * z2; float wx = w * x2, wy = w * y2, wz = w * z2; MATRIX rotMat = DX.MGetIdent(); rotMat.m00 = 1.0f - (yy + zz); rotMat.m01 = xy + wz; rotMat.m02 = xz - wy; rotMat.m10 = xy - wz; rotMat.m11 = 1.0f - (xx + zz); rotMat.m12 = yz + wx; rotMat.m20 = xz + wy; rotMat.m21 = yz - wx; rotMat.m22 = 1.0f - (xx + yy); MATRIX result = rotMat; float sx = bSca.x; float sy = bSca.y; float sz = bSca.z; result.m00 *= sx; result.m01 *= sx; result.m02 *= sx; result.m10 *= sy; result.m11 *= sy; result.m12 *= sy; result.m20 *= sz; result.m21 *= sz; result.m22 *= sz; DX.MV1SetFrameUserLocalMatrix(modelHandle, frameIndex, result); } ====================================================================================================================== このコードを用いて、例えば次のようなボーン構造を持つモデルの変形を行いたいと考えています。 手L ← 腕L2 ← 腕L1 ← 体 → 腕R1 → 腕R2 → 手R しかし、以下のような問題が発生しています。 1. 親ボーンのスケールの影響を受けてしまう 例えば 腕L2 に scale (2,2,2) を設定すると、 手L に (1,1,1) を渡しても、結果として (2,2,2) 基準のスケールで変形されてしまいます。 この挙動を避けて、各ボーンのスケールを独立して制御する方法があるのか知りたいです。 2. スケール適用時にフレームラインの形が変わる 上記のコードで scale を適用すると、 DXLib のデバッグ表示などで確認できる ボーンのフレームラインの形状が変化してしまいます。 例えば scale = (1,1,1) scale = (1.2,1.2,1.2) で フレームラインの形状自体が変わってしまうようです。 現在、フレームのスケールを変更する方法として MV1SetFrameUserLocalMatrix 以外の方法が見つけられていません。 もし、より適切な方法や推奨される実装方法がありましたら、 ご教授いただけますと幸いです。 よろしくお願いいたします。
メンテ

Page: 1 |

Re: MV1SetFrameUserLocalMatrix使用時のボーンScaleの扱いについて ( No.1 )
名前:管理人 日時:2026/03/14 19:20

> 1. 親ボーンのスケールの影響を受けてしまう 親ボーンの回転の状態を小ボーンが引き継ぐように、 親ボーンのスケールも小ボーンは引き継ぎます 親ボーンのスケールの影響を受けないようにする場合は、 小ボーンは親ボーンに設定したスケールを無効化するような スケールを設定する必要があります <例>   親ボーンにスケール 2.0 を設定した場合 result.m00 *= 2.0; result.m01 *= 2.0; result.m02 *= 2.0; result.m10 *= 2.0; result.m11 *= 2.0; result.m12 *= 2.0; result.m20 *= 2.0; result.m21 *= 2.0; result.m22 *= 2.0;   小ボーンはスケール 2.0 を打ち消す設定( 2で割る )を行う result.m00 /= 2.0; result.m01 /= 2.0; result.m02 /= 2.0; result.m10 /= 2.0; result.m11 /= 2.0; result.m12 /= 2.0; result.m20 /= 2.0; result.m21 /= 2.0; result.m22 /= 2.0; よろしければお試しください m(_ _)m > 2. スケール適用時にフレームラインの形が変わる MV1DrawModelDebug で描画されるワイヤーフレームのラインも 設定されたスケールの値に沿って変化しますので、正常な動作です
メンテ
Re: MV1SetFrameUserLocalMatrix使用時のボーンScaleの扱いについて ( No.2 )
名前:初心者 日時:2026/03/14 20:34

ご返信ありがとうございます。 正常とのこと、承知いたしました。 ご提示いただいた情報をもとに、作業を進めてまいります。
メンテ

Page: 1 |

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

   クッキー保存