【3Dゲームエンジン】Unity質問スレッド32 at GAMEDEV【3Dゲームエンジン】Unity質問スレッド32 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト910:名前は開発中のものです。 17/12/14 21:32:41.20 AuQKwcV0.net Matrix4x4 M = Matrix4x4.TRS (Vector2.zero, Q, Vector2.one); は間違いで、 Matrix4x4 M = Matrix4x4.TRS (Vector3.zero, Q, Vector3.one); が正しいです。 911:名前は開発中のものです。 17/12/14 21:45:36.22 AuQKwcV0.net >>859 Quaternion QでベクトルV0を回転させて、ベクトルVにするには、 Z軸で30度回転する場合は、 Quaternion Q = Quaternion.Euler (0, 0, 30); Vector3 V0 = new Vector3(1, 2, 3); Quaternion Qv0 = Quaternion.identity; Qv0.Set(V0.x, V0.y, V0.z, 0); Quaternion Qv = Q * Qv0 * Quaternion.Inverse (Q); Vector3 V = new Vector3(Qv.x, Qv.y, Qv.z); こちらが、本来のQuaternion積でベクトルを回転させる方法です。 Unityでは、この面倒くさいQuaternion積の演算が、 「Quaternion * Vector3」だけでできるようになっています。 912:名前は開発中のものです。 17/12/14 21:55:15.62 AuQKwcV0.net Vector3 = Quaternion * Vector3 は、行列積を意識していると思われます。 Vector3 = Matrix3x3 * Vector3 としたいところですが、 UnityにはMatrix3x3は用意されていません。 (3×3行列の乗算では、回転とスケーリングしかできないからです) Vector4 = new Vector4(Vector3, 1) で4次元ベクトルにしてから、 Vector4 = Matrix4x4 * Vector4 で計算して、 Vector3 = (Vector3)Vector4 で3次元ベクトルへ戻す必要があります。 最初に、Vector4 = (Vector4)Vector3 と手抜きをしてはいけません。 Vector4 = new Vector4(Vector3, 0) で代入されると、 アフィン変換の「移動」が乗算されなくなります。 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch