[過去ログ] 【3Dゲームエンジン】Unity質問スレッド32 (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
854: 2017/12/14(木)00:23 ID:AuQKwcV0(1/7) AAS
 >>853 
  
 そうですね。 
 parentがrootとは限らないので、parentのlossyscaleじゃないとダメですね。 
 末枝側へ変換が累積していきますから。 
  
 親オブジェクト-子オブジェクトの2者関係だと、 
 親オブジェクトのlossyscale = localscaleなので、両方localscaleで大丈夫ですけど。 
  
 親オブジェクト-子オブジェクト-孫オブジェクトの3者関係だと、 
 孫オブジェクトの親オブジェクトである子オブジェクトのlossyscaleは、 
 親オブジェクトのlocalscale * 子オブジェクトのlocalscaleになってますから、 
  
 孫オブジェクトのlossyscale
省6
855: 2017/12/14(木)00:33 ID:AuQKwcV0(2/7) AAS
 Scaleの積は、Vector3の各成分とVector3の各成分の積なので、 
 Vector3 * Vevtor3 は定義されていないから、 
 Vector3.Scale(Vector3, Vevtor3) という演算ですね。 
 いわゆる、アダマール積(シューア積,要素積)です。 
  
 Unityでは、アダマール積の逆関数が定義されていないので、 
 自分でVector3.Scaleの逆関数を定義するか、 
 アダマール積の逆数を自分で定義する必要がありますね。 
866(1): 2017/12/14(木)20:39 ID:AuQKwcV0(3/7) AAS
 >>865 
  
 移動と回転とスケーリングができるように、 
 アフィン変換行列になっているからです。 
  
 Matrix4x4.TRS(position, rotation, scale) 
 で4×4行列に入力できますが、 
  
 出力する時は、 
 Vector3 = Matrix4x4.MultiplyVector(Vector3) 
 によって、Vector3で入力して、 
 Vector3で出力できるようになっています。 
868: 2017/12/14(木)21:30 ID:AuQKwcV0(4/7) AAS
 >>858 
  
 回転行列MでベクトルV0を回転させて、ベクトルVにするには、 
 Z軸で30度回転する場合は、 
  
 Quaternion Q = Quaternion.Euler (0, 0, 30); 
 Matrix4x4 M = Matrix4x4.TRS (Vector2.zero, Q, Vector2.one); 
 Vector3 V0 = new Vector3(1, 2, 3); 
 Vector3 V = M.MultiplyVector (V0); 
  
 これを、QuaternionとVector3の演算で行うと、 
  
 Quaternion Q = Quaternion.Euler (0, 0, 30); 
 Vector3 V0 = new Vector3(1, 2, 3);
省1
869: 2017/12/14(木)21:32 ID:AuQKwcV0(5/7) AAS
 Matrix4x4 M = Matrix4x4.TRS (Vector2.zero, Q, Vector2.one); 
 は間違いで、 
  
 Matrix4x4 M = Matrix4x4.TRS (Vector3.zero, Q, Vector3.one); 
 が正しいです。 
870(1): 2017/12/14(木)21:45 ID:AuQKwcV0(6/7) AAS
 >>858 
  
 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);
省5
871: 2017/12/14(木)21:55 ID:AuQKwcV0(7/7) AAS
 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 と手抜きをしてはいけません。
省2
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.032s