[英]Discard scale transform of Camera in Viewport3D
我有一個帶有mCamera
的主Viewport3D
,它由TrackballDecorator
控制。 我要創建的另一個Viewport3D
僅帶有一個立方體,以表示主視口上的當前攝影機方向。
這段代碼:
Matrix3D TransformationMatrix = mCamera.Transform.Value;
// ?
OrientationCamera.Transform = new MatrixTransform3D(TransformationMatrix);
除了我不希望OrientationCamera
將縮放作為主要縮放(我希望它只是旋轉)外,它的工作原理還不錯。
我可以看到,在使用主攝像機進行縮放操作時,只有矩陣的值M11
, M22
, M33
發生了變化,但是當我旋轉它時它們也發生了變化,而我嘗試應用於這些值的任何更改都會導致我的預覽立方體以意想不到的方式轉變。
有誰知道如何從轉換矩陣中丟棄ScaleTransform
? 或者,也許還有另一種方法?
純旋轉矩陣中的前三行(或列)是單位向量。 如果應用刻度,則這些向量不再具有單位長度。 您可以應用反比例尺來擺脫比例尺。 假設比例在所有三個方向上均相等:
var m11 = TransformationMatrix.M11;
var m12 = TransformationMatrix.M12;
var m13 = TransformationMatrix.M13;
var length = Math.Sqrt(m11 * m11 + m12 * m12 + m13 * m13);
var factor = 1 / length;
TransformationMatrix.Scale(new Vector3D(factor, factor, factor));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.