[英]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.